2008年1月18日金曜日

awkとgrepメモ(1)

■awkメモ
空白行区切りのファイルを編集する。(多分FAQ)
root@host: /tmp/tmp # cat <<-EOF >hoge.txt
> a
> b
> v
>
> d
> e
> f
> EOF
root@host: /tmp/tmp # ls
hoge.txt
root@host: /tmp/tmp # cat hoge.txt
a
b
v

d
e
f
root@host: /tmp/tmp # awk 'BEGIN{RS=""}{print $1,$2,$3}' < hoge.txt
a b v
d e f

■リストファイルでgrep -vする時の注意
リストファイルに空行が含まれると意図しない結果になります。↓
root@host: /tmp/tmp # cat <<-EOF > source.txt
> aaa
> bbb
> ccc
> EOF
root@host: /tmp/tmp # cat <<-EOF > list.txt
> bbb
> XXX
> EOF
root@host: /tmp/tmp # grep -f list.txt source.txt # 期待通り
bbb
root@host: /tmp/tmp # grep -v -f list.txt source.txt # 期待通り
aaa
ccc
root@host: /tmp/tmp # echo >> list.txt # 空行追加
root@host: /tmp/tmp # cat list.txt
bbb
XXX

root@host: /tmp/tmp # grep -f list.txt source.txt # 全部マッチしてしまう
aaa
bbb
ccc
root@host: /tmp/tmp # grep -v -f list.txt source.txt # 全部アンマッチしてしまう
root@host: /tmp/tmp #

db2 INDEX情報の取得(syscatスキーマ、join)

select substr(indschema,1,10),substr(indname,1,20),tbspaceid \
from syscat.indexes where indschema = 'XXXXXXXX'

ついでにtablespacesとのjoin。
select substr(indschema,1,10),substr(indname,1,20),\
substr(tbspace,1,10),ind.tbspaceid \
from syscat.indexes ind inner join syscat.tablespaces ts \
on ts.tbspaceid=ind.tbspaceid \
where indschema = 'XXXXXXXX'

db2 で外部のsqlを実行する+最初の数行のみを見たい時

db2 -f : 外部ファイルのSQL実行。
db2 -xf : ヘッダ出力を抑止。
fetch first N rows only : Nの数だけ出力。
これも当たり前か。でも始めて知ったときは嬉しいものです。
$ cat tmp.sql
-- ←コメント
-- list tables
-- describe table NOINDEX001
-- describe table syscat.indexes
select itemid,createts from icmadmin.NOINDEX001 \
fetch first 5 rows only
$ db2 -f tmp.sql

ITEMID CREATETS
-------------------------- --------------------------
XXXXXXXXXXXXXXXXXXXXXXXXXX YYYY-MM-DD-HH.MM.SS.ssssss
(snip)

5 レコードが選択されました。


$ db2 -xf tmp.sql
XXXXXXXXXXXXXXXXXXXXXXXXXX YYYY-MM-DD-HH.MM.SS.ssssss
(残り4件snip)

好きなプロンプト

export PS1='[${PWD##*/}] # '

ちなみに
[tmp] # hoge=piyo.ksh
[tmp] # echo ${hoge%.ksh}
piyo
[tmp] # hoge=/foo/bar/hoge
[tmp] # echo ${hoge##*/}
hoge

となります。

AIXメモ-killした時errptに上がるプロセスは?

それはinittabから呼ばれるプロセスやlssrcで管理されているプロセスです。

aix 5.2 paxメモ

ルート直下からtarで固めてしまった!
pax -r -s ',^/,./,' -f hoge.tar

でカレントに展開可能。

aix 5.2のtarメモ

リストファイルでtarを取る方法(常識かもしれないですが)。
-cvfの"-(ハイフン)"が重要です。
root@host: /tmp/tmp # ls
bar foo fuga hoge piyo tar.list
root@host: /tmp/tmp # cat tar.list
bar
foo
fuga
hoge
piyo
root@host: /tmp/tmp # tar -cvf all.tar -Ltar.list
bar 0 ブロック。
foo 0 ブロック。
fuga 0 ブロック。
hoge 0 ブロック。
piyo 0 ブロック。
root@host: /tmp/tmp # tar tvf all.tar
-rw-r--r-- 0 0 0 Jan 18 10:43:41 2008 bar
-rw-r--r-- 0 0 0 Jan 18 10:43:41 2008 foo
-rw-r--r-- 0 0 0 Jan 18 10:43:41 2008 fuga
-rw-r--r-- 0 0 0 Jan 18 10:43:41 2008 hoge
-rw-r--r-- 0 0 0 Jan 18 10:43:41 2008 piyo