2つのファイルがあります。
File1:
234 235 283
567
1001
1002 1009
file2:
234 235 283 567 1001 1002 1009
1 1 2 1 2 0 1
0 0 0 0 0 2 2
1 2 2 2 2 2 2
I want in the output the rows in file2 be grouped similar to file 1:
output:
234 235 283 567 1001 1002 1009
1 1 2 1 2 0 1
0 0 0 0 0 2 2
1 2 2 2 2 2 2
最終出力では、グループ内の数字の間にスペースを入れないでください。最初の行はもう存在しません。最終出力:
112 1 2 01
000 0 0 22
122 2 2 22
どんな提案がありますか?
ベストアンサー1
$ awk 'FNR==NR{n+=NF;a[n]=" ";next} FNR>1{for(i=1;i<=NF;i++)printf "%s%s",$i,a[i]; print""}' file1 file2
112 1 2 01
000 0 0 22
122 2 2 22
どのように動作しますか?
まずfile1
、各行のフィールド数を読み取り、使用して出力にスペースを挿入する場所を決定します。次にfile2を読み、スペースを挿入します。
FNR==NR{n+=NF;a[n]=" ";next}
このコマンドは、最初のファイルを読み取ると実行されます。
NF
現在行のフィールド数。n
表示されるフィールドの累積数。a
各配列にスペースを挿入しますn
。 (他の値はデフォルトで空の文字列に設定されます。)FNR>1{for(i=1;i<=NF;i++)printf "%s%s",$i,a[i]; print""}
最初の行以降の行では、各フィールドを印刷して
i
から数字を印刷しますa[i]
。行のすべてのフィールドを印刷したら、print
print newlineを使用します。