私はまだプログラミングを学んでおり、多くのことを試しましたが、フォーマットを正しく指定できません。私タブ区切りファイルには17個の列と多数(約50,000個)の行があります。ファイルは最初の列に基づいてソートされます。同じ最初の列(A)を持つ行をマージしたいのですが、他の16列はすべて異なり、すべての情報を1行、好ましくは同じ列に保持したいと思います。セミコロン;それらの間の区切り文字として。出力ファイルでタブ文字を区切り文字として保持したいと思います。答えてくれてありがとう。私がどこで間違っているかを説明してください。 :)
私が今まで試したこと:
awk -F'\t' 'NF>1{a[$1] = a[$1]";"$2}END{for(i in a){print i""a[i]}}' filename.txt
perl -F',' -anle 'next if /^$/;$h{$F[0]} = $h{$F[0]}.", ".$F[1];
END{print $_,$h{$_},"\n" for sort keys %h}' filename.txt
ファイル形式(残りの15列はB列と形式が同じです)
A B C
123 fvv ggg
123 kjf ggg
123 ccd att
567 abc gst
567 abc hgt
879 ttt tyt
私が望む出力(17列すべてが必要で、2〜16列にはB列とC列と同じ出力が必要です)。 BのすべてのケースはBの下にあり、CのすべてのケースはCの下になければならず、DのすべてのケースはDの下になければなりません。したがって、出力には入力と同じ17列があり、最初の列(この特定のファイルの場合)に多くの反復があるため、50,000行ではなく約20,000行が必要です。
A B C
123 fvv;kjf;ccd ggg;ggg;att
567 abc;abc gst;hgt
879 ttt lll
ベストアンサー1
awk '{
if(NR!=1){a[$1]=$2";"a[$1]}
else print $0}
END{
n = asorti(a, b);
for (n in b) {
print b[n],a[b[n]]
}
}'