0

次のような入力ファイルがあります。

aaa 111    
aaa 222
aaa 333
bbb 444
bbb 555

次のような転置出力ファイルを作成したいと考えています。

aaa 111,222,333
bbb 444,555

awksedなどを使用してこれを行うにはどうすればよいですか?

4

2 に答える 2

2

を使用した片道awk

$ awk '{a[$1]=a[$1]?a[$1]","$2:$2}END{for(k in a)print k,a[k]}' file
aaa 111,222,333
bbb 444,555

の実装がawk三項演算子をサポートしていない場合:

$ awk 'a[$1]{a[$1]=a[$1]","$2;next}{a[$1]=$2}END{for(k in a)print k,a[k]}' file 
aaa 111,222,333
bbb 444,555

新しいファイルはスクリプトに問題を引き起こしませんが、どのような出力が得られますか? おそらく行末の問題だと思います。dos2unix file行末を修正するために実行します。

$ cat file
APM00065101435 189
APM00065101435 190
APM00065101435 191
APM00065101435 390
190104555 00C7
190104555 00D1
190104555 00E1
190104555 0454
190104555 0462

$ awk '{a[$1]=a[$1]?a[$1]","$2:$2}END{for(k in a)print k,a[k]}' file
APM00065101435 189,190,191,390
190104555 00C7,00D1,00E1,0454,0462
于 2013-06-29T21:22:29.557 に答える