내 출력 파일에는 다음이 포함됩니다.
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
위의 값은 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 초 이상이면 형식이 아래와 같이 좋지 않습니다.
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
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
해결책을 도와주세요?
다음 이중 패스 접근 방식은 필드를 고정 열 너비로 형식화해야합니다.
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
까지의 모든 필드를 반복 하여 $NF
) 저장합니다. 배열 max
.sprintf
에서 결정된 고정 너비로 필드를 (재) 형식화합니다 max
.:|
문자 시퀀스 로 간주 됩니다 (다중 문자 입력 필드 구분 기호는 정규식으로 처리되고 |
특별한 의미를 갖기 때문에 적절한 이스케이프 포함 ). 출력 필드 구분 기호는 단일 |
.귀하의 예에 대한 결과
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
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다