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