'\n'을 기준으로 입력을 awk로 잘라낼 수 있나요?

'\n'을 기준으로 입력을 awk로 잘라낼 수 있나요?

우리 모두는 awk를 사용하여 행의 열을 가져올 수 있다는 것을 알고 있지만 열은 공백으로 구분됩니다.

cat FileName | awk ' { print $1,$2,$3 .... }'

하지만 '\n'을 기준으로 파일을 분할하려면 어떻게 해야 할까요?
예를 들어 다음 파일이 있는 경우:

Hi 
Hello
Aloha

"awk"를 사용하여 두 번째 단어 "Hello"를 얻으려면 어떻게 해야 합니까?

답변1

awk에는 필드 구분 기호와 레코드 구분 기호라는 두 가지 주요 유형의 구분 기호가 있습니다. 레코드 구분 기호는 다양한 필드 그룹을 구분합니다. 이 설명에서 짐작할 수 있듯이 기본 레코드는 개행입니다. 변수에서 현재 레코드 인덱스에 액세스할 수 있습니다 NR.

awk 'NR==2 { print; exit }'

그냥 쓸 수도 있지만 awk NR==2awk는 (찾은 후 종료하라고 지시하지 않았기 때문에) 라인 2에 도달한 후 파일의 나머지 부분을 충실히 계속 처리합니다. 이는 대용량 파일에서 오랜 시간이 걸릴 수 있습니다. exit레코드 2를 인쇄한 후 즉시 종료하도록 awk에 지시합니다 .

답변2

여기서 수행하려는 작업에 따라 awk의 "여러 줄 로깅" 모드를 사용할 수 있습니다. Gawk's매뉴얼 에서 :

RS가 빈 문자열로 설정된 경우 레코드는 빈 줄로 구분됩니다. RS가 빈 문자열로 설정되면 개행 문자는 FS가 가질 수 있는 값 외에 항상 필드 구분 기호 역할을 합니다.

따라서 귀하의 경우 다음과 같은 두 번째 줄을 얻을 수 있습니다.

awk '{ print $2 }' RS= FileName

산출:

Hello

답변3

sed두 번째 줄만 인쇄 할 수도 있습니다 .

sed -n '2p' file

또는:

sed '2!d;q' file

sed파일의 나머지 부분을 읽지 않도록 두 번째 줄을 읽고 인쇄한 후 종료합니다.

또는:

head -n 2 file | tail -n 1

관련 정보