파이프 구분 파일에서 필드를 어떻게 인쇄합니까?
문제
파이프 문자로 분리 된 필드가있는 파일이 있고 두 번째 필드 만 인쇄하고 싶습니다. 이 시도는 실패합니다.
$ 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 프로그램 후 파일을 나열해야합니다.
제휴하지 않습니다 StackOverflow