awking txt 파일의 열 문제

awking txt 파일의 열 문제

아래와 같이 txt 파일(input.txt)이 있습니다.

A_Karitiana-4.DG        Ignore_Karitiana(discovery).DG
A_French-4.DG   Ignore_French(discovery).DG
A_Dinka-4.DG    Dinka.DG
A_Dai-5.DG      Dai.DG
S_Dai-2.DG      Dai.DG
B_Dai-4.DG      Dai.DG
S_Dai-3.DG      Dai.DG
S_Dai-1.DG      Dai.DG

input.txt의 첫 번째 열만 포함하는 새 txt 파일(output.txt)을 만들어야 합니다. 따라서 output.txt는 다음과 같아야 합니다.

A_Karitiana-4.DG        
A_French-4.DG   
A_Dinka-4.DG    
A_Dai-5.DG      
S_Dai-2.DG      
B_Dai-4.DG      
S_Dai-3.DG      
S_Dai-1.DG      

나는 다음 명령을 사용해 보았습니다.

awk '$1' input.txt > output.txt

이:

awk -F' ' '$1' input.txt > output.txt

그러나 그들은 모두 input.txt와 똑같이 생긴 output.txt 파일을 생성합니다.

구분 기호 문제인 것 같은데 해결 방법을 모르겠습니다.

답변1

인쇄하지 않습니다. 노력하다

awk '{print $1}' input.txt > output.txt

(시도한 방식으로) 표현식을 제공하면 awk기본값과 약간 비슷하게 작동합니다 grep. 일치하는 행은 모두 정확하게 인쇄됩니다.

  1. awk '/regexp/' file.txt- 정규식과 일치하는 줄을 인쇄합니다.
  2. awk 'NR==3' file.txt- 3행 인쇄
  3. awk '1' file.txt- 1이 참인 모든 줄을 인쇄합니다. 그게 전부입니다(좋아요, 이것은 어색한 고양이 방식이지만 우리는 당신이 하고 있는 일에 가까워지고 있습니다).
  4. awk '$1' file.txt- $1true로 평가되는 모든 줄을 인쇄합니다. 즉, 비어 있지 않습니다(false로 평가되지 않습니다(예: "0")). 즉, 파일이 주어지면 모든 줄을 인쇄합니다( $1여기에는 항상 숫자가 아니고 비어 있지 않은 문자열이 포함되므로).

답변2

awk 스크립트는 pattern {action}쌍으로 구성됩니다.

  • 비어 있으면 모든 레코드에 적용 pattern됩니다.{action}
  • 비어 있으면 일치하는 모든 레코드에 {action}기본 작업이 {print}적용됩니다.pattern

awk '$1'{print}패턴을 $1true로 적용할 때 기본 동작을 평가합니다. 비어있지 않아서true인 경우 로케일에서 첫 번째 필드가 0으로 평가되는 레코드를 제외하고 null이 아닌 모든 레코드를 인쇄합니다.

대신에 신청하고 싶으시다면아니요-기본 동작 {print $1}-기본기본빈 모드:

awk '{print $1}' input.txt > output.txt

답변3

이것은 질문이지만 이 특정 작업에 대한 좋은 대안으로 여기에 제시 awk하겠습니다 .cut

cut -d' ' -f1 input.txt > output.txt

기본 구분 기호(탭)가 공백으로 바뀌었고 -d' '첫 번째 필드가 선택되었습니다 -f1.

관련 정보