명령 출력에서 ​​네 번째 열의 모든 문자열 값을 얻는 가장 빠른 방법

명령 출력에서 ​​네 번째 열의 모든 문자열 값을 얻는 가장 빠른 방법
Item Name        Data     Price            Comment 
shoes            Nike     20               Expensive item
pencil                                     Cheap price
bag                                        Most expensive 

목표는 2열과 3열의 탭 정보를 고려하여 4열의 값을 얻는 것입니다.

을 사용하면 awk '{print $4,$5}'예상한 출력을 얻지만 두 번째 행에 대해 이 작업을 수행하면 데이터가 올바르지 않습니다.

답변1

데이터가 탭으로 구분되어 있고 네 번째 열을 원하는 경우 cut다음 옵션과 함께 사용하세요 -f 4.

cut -f 4 file

cut유틸리티는 탭 문자를 기본 구분 기호로 사용합니다.

명령 awk에 사용되는 기본 필드 구분 기호 awk는 연속 공백(탭 또는 공백)입니다. 을 사용하여 -F '\t'입력 필드 구분 기호를 awk탭으로 변경할 수 있습니다. awk위 명령과 동일한 작업을 수행하는 방법을 확인하세요.cut

awk -F '\t' '{ print $4 }' file

Miller( )와 같은 약간 "고급" TSV 인식 도구를 사용하면 mlr이름으로 열의 주소를 지정할 수도 있습니다.

mlr --tsv cut -f Comment file

이는 데이터를 TSV("Tab Separated Values")로 읽고 Comment각 입력 레코드(행)에 대한 필드를 추출합니다.

("TSV 인식"은 인용된 필드를 통해 awk추가 도움 없이는 수행할 수 없는 CSV 파일에서와 마찬가지로 해당 필드에 탭과 줄바꿈을 포함할 수 있다는 것을 알고 있음을 의미합니다.)

답변2

사용행복하다(이전 Perl_6)

정규 표현식이 당신의 친구라는 말부터 시작하겠습니다. 실제로 5개가 아닌 4개의 열이 있습니까? 1) 제목/본문 "단어 간격"을 밑줄로 변환하고, 2) 탭을 쉼표나 파이프로 변환(또는 다른 적절한 대체:)하여 열을 빠르게 시각화할 수 있습니다.

~$ raku -pe 's:g/\x0020/_/;' < file > tmp1
~$ cat tmp1
Item_Name   Data    Price   Comment 
shoes   Nike    20  Expensive_item
pencil          Cheap_price
bag         Most_expensive

#그런 다음:

~$ raku -pe 's:g/\t/|/;'  < file > tmp2
~$ cat tmp2
Item_Name|Data|Price|Comment|
shoes|Nike|20|Expensive_item
pencil|||Cheap_price
bag|||Most_expensive

실제로 네 번째 열(0 인덱스 = 3)을 추출하기 위해 이 시점의 코드는 다음과 같이 단순화됩니다.

~$ raku -ne 'put .split("|").[3] // "";' tmp2

위의 코드는 빈 줄을 유지합니다. 빈 줄을 제거하려면 다음 명령을 사용하세요.

~$ raku -ne '.put with .split("|").[3];' tmp2

올바른 열이 있다고 확신하면 처음부터 원본 파일에 위의 코드를 매개변수 .split("\t")(예: 분할 on )를 사용하여 실행하세요 tab.

출력 예(원본 파일, 분할 \t):

Comment
Expensive item
Cheap price
Most expensive

https://docs.raku.org/언어/regexes#\t_and_\T
https://raku.org

관련 정보