예를 들어:
이것이 파일 번호라고 가정합니다.
1. hi
2. hello
3. hey
"hello"를 얻기 위해 공백을 어떻게 제거할 수 있나요?
$ head -1 num | (what should be here to make it below)
hi
답변1
awk
작업이 포함된 패턴과 유사한 패턴을 사용하여 작성된 코드입니다. 여기서 "모드"는 첫 번째 행에서만 작업을 수행하려는 것이며 "작업"은 "두 번째 열을 인쇄한 다음 종료"하는 것입니다.
awk 'NR == 1 { print $2; exit }' file
이 경우 이는 exit
선택적 최적화이며 제거할 수 있습니다(다른 동작 NR
1 없음). NR
"현재 줄의 시퀀스 번호" 또는 "지금까지 읽은 줄 수"를 나타냅니다.
이 간단한 예에서는 head
귀하의 시도를 기반으로 구축되었습니다.
head -n 1 file | while read -r num word; do printf '%s\n' "$word"; done
또는,
read -r num word <file
printf '%s\n' "$word"
우리는 첫 번째 행에만 관심이 있기 때문에 동일한 작업을 수행합니다.
... 하지만셸 자체에서 텍스트를 구문 분석하는 것은 오류가 발생하기 쉬우므로 피해야 합니다.. 이와 같은 작은 예를 사용하면 잘 작동합니다.
당신은 이 단어를 사용했습니다조각제목의 영어 의미는 다음과 같습니다.자르다, 또 다른 Unix 유틸리티입니다. 여기에서 사용할 수 있지만 약간 간단하며 사용 방법은 두 데이터 열 사이의 구분 기호에 따라 다릅니다.
열 사이에 탭이 있는 경우:
head -n 1 file | cut -f 2
열 사이에 공백이 3개 있는 경우:
head -n 1 file | cut -d ' ' -f 4
답변2
첫 번째 줄을 원하는지 아니면 특정 줄( foo
파일인지)을 원하는지에 따라 다릅니다.
특정 행만 분할하려면 다음을 사용하세요.
$ awk 'NR==1 { print $2; exit}' foo
hi
$ awk 'NR==2 { print $2; exit}' foo
hello
내용을 기준으로 행을 선택하려면 다음을 사용하십시오.
$ awk '/1./ { print $2; exit }' foo
hi
$ awk '/2./ { print $2; exit }' foo
hello
$ awk '$1 ~ 2. { print $2; exit }' foo
hello
$ awk '/hello/ { print $2; exit }' foo
hello
모든 경우에 이렇게 exit
하면 첫 번째 일치 항목만 인쇄됩니다(또한 전체 파일이 처리되는 것을 방지합니다).