표 형식의 행과 열이 있는 텍스트 파일의 출력을 인쇄하는 방법

표 형식의 행과 열이 있는 텍스트 파일의 출력을 인쇄하는 방법

내 출력 파일에는 다음 내용이 포함되어 있습니다.

출력.txt

2020.11.07-22.3.31 INFO - :|FSNAME:|AVAILABLE:|AVAILABILITY
2020.11.07-22.3.31 INFO - :|/opt:|yes:|1.4GB
2020.11.07-22.3.31 INFO - :|/data:|yes:|30GB

위의 값은 output.txt해당 변수에서 더해져서 출력되는 크기가 달라지고 글자에만 국한할 수는 없습니다.

column설치 명령이 없습니다 miller!

다음 방법을 사용했는데 출력이 순서대로 되지 않습니다

  • awk '{ gsub(":", " " ) } 1' output.txt
    2020.11.07-22.3.31 INFO -  |FSNAME |AVAILABLE |AVAILABILITY
    2020.11.07-22.3.31 INFO -  |/opt |yes |1.4GB
    2020.11.07-22.3.31 INFO -  |/data |yes |30GB
    
  • awk -F ':' '{printf "%-10s%-10s%-10s%-10s\n", $1,$2,$3,$4}' output.txt
    2020.11.07-22.3.31 INFO -  |FSNAME    |AVAILABLE|AVAILABILITY
    2020.11.07-22.3.31 INFO -  |/opt      |yes      |1.4GB
    2020.11.07-22.3.31 INFO -  |/data     |yes      |30GB
    

가변 크기 중 하나를 출력 파일에 쓰는 데 10초 이상이 걸리는 경우 아래와 같이 형식이 올바르지 않습니다.

출력.txt

2020.11.07-22.3.31 INFO - :|FSNAME:|AVAILABLE:|AVAILABILITY
2020.11.07-22.3.31 INFO - :|/opt:|yessssssss:|1.4GB
2020.11.07-22.3.31 INFO - :|/data:|yes:|30GB
awk -F ':' '{printf "%-10s%-10s%-10s%-10s\n", $1,$2,$3,$4}' output.txt
2020.11.07-22.3.31 INFO -  |FSNAME    |AVAILABLE|AVAILABILITY
2020.11.07-22.3.31 INFO -  |/opt      |yessssssss|1.4GB
2020.11.07-22.3.31 INFO -  |/data     |yes      |30GB

문제를 해결하는 데 도움을 주세요.

답변1

다음 2단계 방법은 필드의 형식을 고정된 열 너비로 지정해야 합니다.

awk -F':\\|' -v OFS='|' 'NR==FNR{for (i=1;i<=NF;i++) {if (length($i)>max[i]) max[i]=length($i);} next;}
           {for (i=1;i<=NF;i++) $i=sprintf("%-*s",max[i],$i)}1' output.txt output.txt

이것이 처리할 것이다output.txt 두 배(그래서 인수로 두 번 지정해야 합니다 awk.)

  • 첫 번째 단계( FNR파일별 라인 카운터가 글로벌 라인 카운터와 동일함 )에서는 단순히 각 필드 항목의 최대 길이를 찾아( ~에서 모든 필드를 NR반복하여 ) 배열에 저장합니다 .$1$NFmax
  • sprintf두 번째 패스에서는 최대 필드 너비 배열을 기반으로 결정된 고정 너비 로 ​​필드의 형식을 (다시) 지정합니다 .max
  • 입력된 필드 구분 기호는 결합 문자 시퀀스로 처리됩니다 :|(다중 문자이기 때문에 적절한 이스케이프 사용).입력하다필드 구분 기호는 정규식으로 처리되며 |특별한 의미를 갖습니다. 출력 필드 구분 기호는 Single 로 설정됩니다 |.

귀하의 예의 결과

2020.11.07-22.3.31 INFO - |FSNAME|AVAILABLE|AVAILABILITY
2020.11.07-22.3.31 INFO - |/opt  |yes      |1.4GB       
2020.11.07-22.3.31 INFO - |/data |yes      |30GB        

관련 정보