텍스트를 열로 서식 지정


11

아래에 표시된 것처럼 두 개의 열이있는 파일이 있습니다 (예).

파일 1 :

John 1
Peter 2
Michael Rod 3
Su 7
Louise 9

이 형식을 지정해야하며 예상 출력은 다음과 같아야합니다.

파일 1 :

John        1
Peter       2
Michael Rod 3
Su          7
Louise      9

1
2 열은 어디에 있습니까?
marc

두 출력이 같은 것 같습니다. 질문에 대한 자세한 내용을 알려주시겠습니까?

2
열은 어떻게 정의됩니까? 이름과 숫자 사이에 탭이나 다른 문자가 있습니까? 이것이 Michael Rod 33 열이 아닌 2 열 임을 어떻게 알 수 있습니까?
terdon

2
아니요, 텍스트 이미지를 게시하지 마십시오 . 나는 당신을 도울 수 있도록 그 텍스트를 복사하여 붙여 넣을 수 있었지만 지금은 할 수 없습니다.
Kusalananda

1
mmmint와 terdon이 말한 것을 분리하십시오. 예를 들어 가장 긴 줄의 너비를 허용하기 위해 들여 쓰기해야하는 마지막 열임을 지정할 수 있습니까?
Jeff Schaller

답변:


18

입력이 단지 두 개의 열 이었다면을 사용하도록 제안했을 것 column -t입니다. column유틸리티는 여러 개의 공백이나 탭을 열 구분 기호로 취급하기 때문에 여기서는 작동하지 않습니다 .

$ column -t file1
John     1      
Peter    2      
Michael  Rod  3 
Su       7      
Louise   9      

"Michael Rod"는 두 개의 열이므로 단일 행에 다른 행보다 하나의 열이 더 많아 져 출력이 엉망이됩니다.

마지막 열 앞에 탭 문자를 삽입 한 다음 column이를 구분 기호로만 사용 하여이 문제를 해결할 수 있습니다 .

$ awk '{ $NF = "\t" $NF; print }' file1 | column -t -s $'\t'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9

Awk에서 NF필드 수 (열)이며 $NF마지막 필드의 데이터입니다. 내가 사용하는 스크립트 는 완전한 행을 인쇄하기 전에 탭 문자를 앞에 붙여서 마지막 필드의 데이터 를 간단히 수정 합니다.

쉘이 이해하지 못하면 $'\t'데이터의 일부가 아닌 다른 문자를 선택할 수 있습니다.

awk '{ $NF = "@" $NF; print }' file1 | column -t -s '@'
John          1
Peter         2
Michael Rod   3
Su            7
Louise        9
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.