우리 모두는 awk를 사용하여 행의 열을 가져올 수 있다는 것을 알고 있지만 열은 공백으로 구분됩니다.
cat FileName | awk ' { print $1,$2,$3 .... }'
하지만 '\n'을 기준으로 파일을 분할하려면 어떻게 해야 할까요?
예를 들어 다음 파일이 있는 경우:
Hi
Hello
Aloha
"awk"를 사용하여 두 번째 단어 "Hello"를 얻으려면 어떻게 해야 합니까?
답변1
awk에는 필드 구분 기호와 레코드 구분 기호라는 두 가지 주요 유형의 구분 기호가 있습니다. 레코드 구분 기호는 다양한 필드 그룹을 구분합니다. 이 설명에서 짐작할 수 있듯이 기본 레코드는 개행입니다. 변수에서 현재 레코드 인덱스에 액세스할 수 있습니다 NR
.
awk 'NR==2 { print; exit }'
그냥 쓸 수도 있지만 awk NR==2
awk는 (찾은 후 종료하라고 지시하지 않았기 때문에) 라인 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