아래와 같이 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
. 일치하는 행은 모두 정확하게 인쇄됩니다.
awk '/regexp/' file.txt
- 정규식과 일치하는 줄을 인쇄합니다.awk 'NR==3' file.txt
- 3행 인쇄awk '1' file.txt
- 1이 참인 모든 줄을 인쇄합니다. 그게 전부입니다(좋아요, 이것은 어색한 고양이 방식이지만 우리는 당신이 하고 있는 일에 가까워지고 있습니다).awk '$1' file.txt
-$1
true로 평가되는 모든 줄을 인쇄합니다. 즉, 비어 있지 않습니다(false로 평가되지 않습니다(예: "0")). 즉, 파일이 주어지면 모든 줄을 인쇄합니다($1
여기에는 항상 숫자가 아니고 비어 있지 않은 문자열이 포함되므로).
답변2
awk 스크립트는 pattern {action}
쌍으로 구성됩니다.
- 비어 있으면 모든 레코드에 적용
pattern
됩니다.{action}
- 비어 있으면 일치하는 모든 레코드에
{action}
기본 작업이{print}
적용됩니다.pattern
awk '$1'
{print}
패턴을 $1
true로 적용할 때 기본 동작을 평가합니다. 비어있지 않아서끈true인 경우 로케일에서 첫 번째 필드가 0으로 평가되는 레코드를 제외하고 null이 아닌 모든 레코드를 인쇄합니다.
대신에 신청하고 싶으시다면아니요-기본 동작 {print $1}
-기본기본빈 모드:
awk '{print $1}' input.txt > output.txt
답변3
이것은 질문이지만 이 특정 작업에 대한 좋은 대안으로 여기에 제시 awk
하겠습니다 .cut
cut -d' ' -f1 input.txt > output.txt
기본 구분 기호(탭)가 공백으로 바뀌었고 -d' '
첫 번째 필드가 선택되었습니다 -f1
.