2016-08-10 3 views
0

다음 형식으로 나타나는 데이터의 텍스트 파일이 있습니다.awk - 3 열 형식으로 출력 출력

apropos c 
awk nc 
chsh c 
date nc 
grep nc 
i3 nc 
ip6tables nc 

아래와 같이 awk를 통해이 데이터를 필터링하여 3 열 형식을 생성하려고합니다.

apropos   awk   chsh 
date    grep   i3 

나는 파일에 대한 정보의 두 번째 열을 필요로하지 않지만, 첫 번째 열의 깨끗하고 정렬 된 출력을하고 싶습니다. 다음 코드를 다른 곳에서 찾아서 데이터의 첫 번째 열만 출력하도록 수정했습니다. 문제는 탭 사용으로 인해 잘못 정렬 된 것입니다.

awk '{printf (NR %3 == 0)? $1 "\n" : $1"\t\t" }' 

좀 더 연구를하는 I (예. "% -10s") AWK의의 printf를 통해 폭의 사용을 발견했다. 문제는 그것이 내가 원하는대로 할 수 있도록 명령에 통합하는 방법을 잘 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

'ip6tables'가 3의 배수가 아니기 때문에 출력에 나타나지 않길 원하십니까? –

+0

출력 할 첫 번째 열을 모두 찾고 있습니다. 그것에 관계없이 3의 배수가됩니다. – barefly

+0

그런 다음 [편집] 예상 출력을 표시합니다. –

답변

4

이 하드 코딩하는 것보다 당신에게 더 유용 할 수 있습니다 10 같은 몇 가지 임의의 필드 폭 :

$ awk '{ORS=(NR%3?FS:RS); print $1}' file | column -t 
apropos awk chsh 
date  grep i3 
ip6tables 

또는 출력에서 ​​ip6tables을 드롭 할 경우 샘플 입력/출력과 같이 :

당신이 column에 파이프를하지 않고 먼저 각 열의 최대 너비를 알아 내기 위해 입력 파일이 패스를 AWK 필요가 다음 필드 폭과 같은 일부 임의의 수를 선택하지 않으려면
$ awk '{rec = rec OFS $1} !(NR%3){print rec; rec=""}' file | column -t 
apropos awk chsh 
date  grep i3 

전에 printi ng (https://stackoverflow.com/a/38791539/1745001 참조).

WRT 첫 번째 예 - ip6tables 후 누락 된 줄 바꿈이있을 때 당신의 column 경고를 제공하는 경우 다음을 추가 할 수 있도록 줄 바꿈 끝나지 않는 입력에 어떤 UNIX 도구를 실행은 POSIX 사양에 따라 정의되지 않은 동작에 의존 :

$ awk '{ORS=(NR%3?FS:RS); print $1} END{if (NR%3) printf "%s", RS}' file | column -t 
apropos awk chsh 
date  grep i3 
ip6tables 
+1

의도 한대로 작동합니다. 어쨌든 awk 문이 어떻게 작동하는지에 대한 요약을 얻을 수 있습니까? 나는 여전히 배우고 있으며 항상 이해에 관심이 있습니다. – barefly

+0

@barefly awk 맨 페이지에서 ORS, FS, RS, NR을 찾은 다음 스크립트를 다시 읽습니다 (필요한 경우'print's 값을 추가하여 테스트/설정중인 값을 확인하십시오). 그러면 아마 이해할 수 있습니다. 그 (것)들 즉시 그러나 만약에 당신이 어떤 특정한 질문이 있으면 나는 알리지 않으며 나는 그 (것)들에 응답하게 행복 할 것이다. –

1

다음과 같은 awk | column 파이프를 사용할 수 있습니다 (적어도) 열 명령의 BSD 버전은 경고 인쇄됩니다 이후 :

column: line too long 

을하고 마지막 줄을 생략

awk '{sep=NR%3?OFS:ORS;printf "%s%s", $1, sep}END{if(NR%3)print ""}' a.txt \ 
    | column -t 

주 목록의 줄 수가 열 개수의 배수가 아닌 경우이 경우 마지막 요소 다음에 줄 바꿈을 인쇄해야합니다.

1

비 AWK 용액

$ cut -d' ' -f1 <file | paste - - - | column -t 

apropos awk chsh 
date  grep i3 
ip6tables 

또는 함께 pr