내 텍스트 파일에는 구분 기호를 지정하는 구분 기호가 없고 공백만 있습니다. 출력 파일에서 열 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
답변1
가장 간단한 방법은 awk
여러 개의 연속된 공백을 단일 공백으로 처리하는 것입니다.
awk '{print $2}' file
인쇄
207
412
431
그러나 분명히 이 작업을 수행할 수 있는 다른 도구도 많고 (GNU)와 같이 이러한 종류의 작업을 위해 설계되지 않은 도구도 있습니다 grep
.
grep -Po '^[^ ]+[ ]+\K[^ ]+' file
답변2
파이프를 사용하여 추가 공백을 압축하고 columns.txt
데이터(예: in)를 다음으로 보냅니다 cut
.
tr -s ' ' < columns.txt | cut -d" " -f2
제공한 샘플 데이터에서 단일 공백 구분 기호는 필수 데이터를 필드 5에 넣습니다. 그러나 첫 번째 열이 숫자이고 오른쪽 정렬을 위한 선행 공백이 있는 경우 필드 번호를 조정해야 합니다. 공백을 압축하기 위해 첫 번째를 사용하면 tr -s ' '
이 문제를 처리하는 것을 피할 수 있습니다.
출력을 다른 파일로 보내려면 리디렉션을 사용하십시오.
tr -s ' ' < columns.txt | cut -d" " -f2 > field2.txt
awk 명령을 사용하면 아래와 같은 작업을 수행할 수 있으며 데이터가 거기에 있기 때문에(?) 현재 있는 필드를 자동으로 식별합니다. awk에 대해 더 알아야 합니다.
awk -F' ' '{print $2}' columns.txt
답변3
모든man cut
-w Use whitespace (spaces and tabs) as the delimiter. Consecutive
spaces and tabs count as one single field separator.
껍데기:
% cat $$
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
% cut -w -f2 $$
207
412
431
%
답변4
사용진주
perl -lane 'print $F[1];'
사용행복하다(이전 Perl_6)
raku -ne 'put .words[1];'
바라보다:
https://unix.stackexchange.com/a/109894/227738
https://unix.stackexchange.com/a/555394/227738
https://unix.stackexchange.com/a/701811/227738