탭으로 구분된 동적 길이 열(4개)을 포함하는 파일이 있습니다(한 열에는 공백이 있을 수 있음).
COL1 COL2 COL2 COL2 COL3 COL3 COL4
COL1 COL2 COL2 COL3 COL4 COL4
COL1 COL1 COL2 COL2 COL3 COL4 COL4 COL4
awk에서 printf를 사용하여 동적으로 형식을 지정하고 싶나요? 고정된 조정으로 포맷할 수 있습니다.
$ awk 'BEGIN {FS="\t"}; {printf "%-10s %-10s %-15s %-15s\n", $1,$3,$4,$2}' test
COL1 COL3 COL3 COL4 COL2 COL2 COL2
COL1 COL3 COL4 COL4 COL2 COL2
COL1 COL1 COL3 COL4 COL4 COL4 COL2 COL2
답변1
배쉬에서는 다음을 사용하십시오.column
$ column -s $'\t' -t file.tsv
col1 col2 col2 col2 col3 col3 col4
col1 col2 col2 col3 col4 col4
col1 col1 col2 col2 col3 col4 col4 col4
column -t
열을 구분하려면 공백 2개를 사용하세요.
awk를 사용하여 작성하겠습니다.
awk -F '\t' -v cols=4 '
NR == FNR {
for (i=1; i<=cols; i++)
if (NR == 1 || length($i) > w[i])
w[i] = length($i)
next
}
{
for (i=1; i<=cols; i++)
printf "%-*s%s", w[i], $i, (i == cols ? ORS : FS)
}
' file.tsv file.tsv
파일을 두 번 처리합니다. 먼저 각 열의 최대 너비를 찾은 다음 파일 형식을 다시 지정합니다. 출력에서 열을 구분하기 위해 탭을 사용합니다.
col1 col2 col2 col2 col3 col3 col4
col1 col2 col2 col3 col4 col4
col1 col1 col2 col2 col3 col4 col4 col4