문제

파이프 문자로 분리 된 필드가있는 파일이 있고 두 번째 필드 만 인쇄하고 싶습니다. 이 시도는 실패합니다.

$ cat file | awk -F| '{print $2}'
awk: syntax error near line 1
awk: bailing out near line 1
bash: {print $2}: command not found

이것을 할 방법이 있습니까?

도움이 되었습니까?

해결책

여기서 핵심 요점은 파이프 문자입니다.|)는 껍질로 탈출해야합니다. 사용 "\|" 또는 "'|'"쉘 간격으로부터 그것을 보호하고 통과 할 수 있도록 awk 명령 줄에서.


댓글 읽기 원래 포스터가 필터링과 관련된 원래 문제의 단순화 된 버전을 나타냅니다. file 필드를 선택하고 인쇄하기 전에. 통과 grep 현장 선택을 위해 사용되었고 결과를 AWK로 배관했습니다. 그것은 전적으로 불필요한 것을 설명합니다 cat file 그것은 질문에 나타납니다 (그것을 대체합니다 grep <pattern> file).

좋아, 그것은 효과가있을 것이다. 그러나 AWK grep. 다음과 같은 것을 사용하십시오.

awk -F\| '/<pattern>/{print $2;}{next;}' file

그만큼 /<pattern>/ 비트를 말합니다 awk 일치하는 라인에서 다음 행동을 수행하려면 <pattern>.

잃어버린 느낌 {next;} 입력의 다음 줄로 건너 뛰는 기본 조치입니다. 필요하지 않은 것 같지만 오래 전부터이 습관이 있습니다 ...

다른 팁

또는 하나의 명령 만 사용하십시오.

cut -d '|' -f FIELDNUMBER

쉘이 해석하지 않도록 파이프 문자를 피해야합니다. 간단한 해결책 :

$ awk -F\| '{print $2}' file

또 다른 선택은 캐릭터를 인용하는 것입니다.

$ awk -F'|' '{print $2}' file

그리고 '파일'에는 파이프 기호가 포함되어 있지 않으므로 아무것도 인쇄하지 않습니다. '고양이 파일'을 사용하거나 AWK 프로그램 후 파일을 나열해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top