텍스트 파일에서 열 2를 자릅니다.


15

내 텍스트 파일에는 구분 기호 만 공백을 지정하는 구분 기호가 없습니다. 파일 2를 출력하기 위해 열 2를 잘라내는 방법,

39    207  City and County of San Francisc   REJECTED          MAT = 0
78    412  Cases and materials on corporat   REJECTED          MAT = 0
82    431  The preparation of contracts an   REJECTED          MAT = 0

그래서 필요한 결과는

207
412
432

답변:


13

awk여러 연속 공백을 단일 공백으로 처리하는 것이 가장 쉽습니다.

awk '{print $2}' file

인쇄물

207
412
431

그러나 분명히 다음과 같은 작업을 수행하도록 설계되지 않은 많은 다른 도구가 있습니다 grep.

grep -Po '^[^ ]+[ ]+\K[^ ]+' file

6

파이프를 사용하여 데이터 (예 : cat columns.txt)를 잘라내십시오.

cat columns.txt | cut -d" " -f5

제공 한 예제 데이터에서 단일 공백 ​​구분 기호는 원하는 데이터를 필드 5에 넣습니다. 해당 출력을 다른 파일로 보내려면 리디렉션을 사용하십시오.

cat collumns.txt | cut -d" " -f5 > field2.txt

awk 명령을 사용하면 다음과 같은 작업을 수행하여 다음과 같은 작업을 수행 할 수 있습니다. awk에 대해 더 자세히 알아야 할 데이터가 있기 때문에 현재 필드를 자동으로 인식합니다.

awk -F' ' '{print $2}' columns.txt

3
소멸 cat ... |이 거의 필요하지 않습니다. 대부분의 Unix 명령 cut은 하나 이상의 입력 파일을 인수로 사용합니다 (예 :) cut -d" " -f5 columns.txt.
Denis Howe

1

@ jimmij가 말했듯 awk '{print $2}' file이 가장 간단한 대답입니다.

어떤 awk이유로을 사용 하고 사용하지 않으려는 경우 컷으로 파이핑하기 전에 두 개 이상의 공간의 모든 인스턴스를 단일 탭 ( '기본 구분 기호) 으로 변환 cut하는 sed데 사용할 수 있습니다 cut.

$ sed -e 's/  \+/\t/g' riley.txt | cut -f2 
207
412
431

0

단일 공백을 구분 기호로 계속 사용할 수 있으며 더 많은 열이 있습니다. 원하는 값을 cut -d' ' -f2에서 5 또는 6으로 늘리십시오 . 원하는 결과를 얻을 때까지 숫자를 늘리십시오 .


0
grep -Po '^[^ ]+[ ]+\K[^ ]+' file

위의 방법은 아래와 같이 쉘 스크립트에서 "루트"사용자로 변경하는 경우 데이터 추출을위한 awk와 같은 Linux 유틸리티가 작동하지 않을 때 매우 유용합니다.

sudo -i <<EOF
ps aux | grep -E -i "[l]js"  |grep -v "javaagent" | awk '{print $2}' # So awk won't work here
ps aux | grep -E -i "[l]js"  | grep -v "javaagent" | grep -Po '^[^ ]+[ ]+\K[^ ]+'
EOF

1
awk예제에서 "작동하지 않는 "유일한 이유 는 here-document가 인용되지 않았기 때문에 $2쉘에서 두 번째 위치 매개 변수로 확장 되었음을 의미합니다 . 해결책은 아마도 grep명령 으로 전환하는 것이 아니라 $in $2을 이스케이프 처리 \$2하거나 <<'EOF'대신에 전체 문서를 인용하는 것 입니다 <<EOF. 또한 예제의 작업은보다 간단하게 수행됩니다 pgrep.
Kusalananda

감사합니다 @Kusalananda. 그것은 매력처럼 작동했습니다.
Alok Tiwari
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.