awk
次の状況ではどのように使用しますか?
同じ列で始まる行を連結したいと思います。結合後、最初の列(この場合)のみがaaa
保持されwww
ますhhh
。
ファイルはスペースまたはタブで区切ることができます。
入力例:
aaa bbb ccc ddd NULL NULL NULL
aaa NULL NULL NULL NULL NULL NULL
aaa bbb ccc NULL NULL NULL NULL
www yyy hhh NULL NULL NULL NULL
hhh 111 333 yyy ooo hyy uuuioooy
hhh 111 333 yyy ooo hyy NULL
希望の出力:
aaa bbb ccc ddd NULL NULL NULL NULL NULL NULL NULL NULL NULL bbb ccc NULL NULL NULL NULL
www yyy hhh NULL NULL NULL NULL
hhh 111 333 yyy ooo hyy uuuioooy 111 333 yyy ooo hyy NULL
背景は、最初の列が常にエンティティの識別子である非常に単純なファイルベースのデータベースを構築したいということです。同じ識別子列に基づくすべての行が連結されます。
ベストアンサー1
awkを使用して各行の最初の列を取得するには、次のようにします。
< testfile awk '{print $1}'
aaa
aaa
aaa
www
hhh
hhh
これは残りの行のキーです。したがって、行の最初の列をキーとして使用し、行の2番目の列を値としてハッシュテーブルを作成できます。
< testfile awk '{table[$1]=table[$1] $2;} END {for (key in table) print key " => " table[key];}'
www => yyy
aaa => bbbNULLbbb
hhh => 111111
残りの行(2列目から始まる)を取得するには、すべての列を収集する必要があります。
< testfile awk '{line="";for (i = 2; i <= NF; i++) line = line $i " "; table[$1]=table[$1] line;} END {for (key in table) print key " => " table[key];}'
www => yyy hhh NULL NULL NULL NULL
aaa => bbb ccc ddd NULL NULL NULL NULL NULL NULL NULL NULL NULL bbb ccc NULL NULL NULL NULL
hhh => 111 333 yyy ooo hyy uuuioooy 111 333 yyy ooo hyy NULL