껍질을 자르는 방법?

껍질을 자르는 방법?

예를 들어:

이것이 파일 번호라고 가정합니다.

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선택적 최적화이며 제거할 수 있습니다(다른 동작 NR1 없음). 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 유틸리티입니다. 여기에서 사용할 수 있지만 약간 간단하며 사용 방법은 두 데이터 열 사이의 구분 기호에 따라 다릅니다.

  1. 열 사이에 탭이 있는 경우:

    head -n 1 file | cut -f 2
    
  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하면 첫 번째 일치 항목만 인쇄됩니다(또한 전체 파일이 처리되는 것을 방지합니다).

관련 정보