2番目のファイルの情報に基づいて1番目のファイルの情報をどのようにグループ化できますか?

2番目のファイルの情報に基づいて1番目のファイルの情報をどのようにグループ化できますか?

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]。行のすべてのフィールドを印刷したら、printprint newlineを使用します。

おすすめ記事