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

내 텍스트 파일에는 구분 기호 만 공백을 지정하는 구분 기호가 없습니다. 파일 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


답변

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

awk '{print $2}' file

인쇄물

207
412
431

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

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

답변

파이프를 사용하여 데이터 (예 : 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

답변

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

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

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

답변

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


답변

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