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