awk - 탭으로 구분된 열의 ​​형식을 동적으로 지정합니다.

awk - 탭으로 구분된 열의 ​​형식을 동적으로 지정합니다.

탭으로 구분된 동적 길이 열(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

관련 정보