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