awk: "pr -mt ファイル*" をシミュレートします。

awk: "pr -mt ファイル*" をシミュレートします。

awkマルチファイル処理構造で遊ぶとき

awk 'NR == FNR { # some actions; next} # other condition {# other actions}' file*.txt

awk印刷のためにさまざまなサイズのテキストファイルを変換できるかどうか自分に尋ねました。

pr -mt file*

仮定:

ファイル1.txt

arbitrary text of the first file,
which is not so long.

More arbitrary text of the first file.

ファイル2.txt:

Arbitrary text of the second file.
More arbitrary text of the second file.
More and More arbitrary text of the second file.
It's going on.
But finally every text will end.

出力は次のようになります。

$ pr -w150 -mt file*
arbitrary text of the first file,         Arbitrary text of the second file.            
which is not so long.                     More arbitrary text of the second file.       
                                          More and More arbitrary text of the second file.  
More arbitrary text of the first file.    It's going on.                    
                                          But finally every text will end.  

awkコマンドだけでどのようにこれを達成できますかfile*.txt

答え1

各ファイルのすべての行を記録し、各ファイルの最大行長と行数を記録し、最後にすべての行を印刷できます。

awk '
  FNR == 1 {f++}
  {line[f, FNR] = $0}
  length > width[f] {width[f] = length}
  FNR > max_lines {max_lines = FNR}
  END{
    for (row = 1; row <= max_lines; row++) {
      for (i = 1; i <= f; i++)
        printf "%-*s", (i == f ? 0 : width[i] + 2), line[i, row]
      print ""
    }
  }' ./*.txt

関連情報