次のファイルがあります。
id name age
1 ed 50
2 joe 70
id
私は印刷と列だけが欲しいですage
。今、私は次を使いますawk
。
cat file.tsv | awk '{ print $1, $3 }'
ただし、これには列番号を知る必要があります。列番号の代わりに列名(最初の行に指定)を使用する方法はありますか?
ベストアンサー1
たぶん、次のようなものがあります。
$ cat t.awk
NR==1 {
for (i=1; i<=NF; i++) {
ix[$i] = i
}
}
NR>1 {
print $ix[c1], $ix[c2]
}
$ awk -f t.awk c1=id c2=name input
1 ed
2 joe
$ awk -f t.awk c1=age c2=name input
50 ed
70 joe
コマンドラインに印刷する列を指定するには、次のようにします。
$ cat t.awk
BEGIN {
split(cols,out,",")
}
NR==1 {
for (i=1; i<=NF; i++)
ix[$i] = i
}
NR>1 {
for(i=1; i <= length(out); i++)
printf "%s%s", $ix[out[i]], OFS
print ""
}
$ awk -f t.awk -v cols=name,age,id,name,id input
ed 1 ed 50 1
joe 2 joe 70 2
(-v
ブロックで定義された変数を取得するためのスイッチに注意してくださいBEGIN
。)