텍스트 파일에서 열 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

답변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

관련 정보