와일드카드를 사용하여 awk에서 여러 데이터 파일 읽기

와일드카드를 사용하여 awk에서 여러 데이터 파일 읽기

file1.dat, file2.dat 등이라는 이름의 여러 데이터 파일이 있는데 각각 2개의 열과 3개의 행이 포함되어 있습니다.

명령을 사용하여 여러 파일을 읽었습니다.

awk '{print $2}' file*.dat

두 번째 열의 모든 파일이 출력으로 멋지게 나열됩니다. 그런데 각 파일의 두 번째 줄만 읽으려고 하면 첫 번째 파일인 file1.dat만 읽습니다.

awk '{if(NR==2) print $2}' file*.dat

타자를 쳐도

awk '{if(NR==2) print $2}' file1.dat file2.dat file3.dat

즉, 와일드카드를 생략한 경우

분명히 내 구문이 매우 잘못되었습니다. 그게 중요하다면 저는 MacOS Mojave에서 gawk가 아닌 awk를 사용하고 있습니다. 내가 뭘 잘못하고 있는지 알고 싶습니다.

답변1

여기서 키 FNR대신 사용하세요 . 제공된 모든 입력에 대한 총 레코드 수입니다. 현재 처리 중인 입력 파일의 레코드 번호입니다.NRNRFNR

그래서:

awk 'FNR == 2 {print $2}' ./file*.dat

또한 생략하는 condition {action}대신 더 관용적인 패턴에 주목하세요.awk상황그리고if()행동부분.

또한 파일 이름에 문자가 포함될 수 있는 문제를 방지하기 ./위해 glob을 사용할 때 일반적으로 사용하는 접두사를 기록해 두십시오.awk=

또한 glob은 어휘순으로 정렬되고 , ./file1.dat, ./file10.dat, ./file11.dat, ./file2.data... ./file3.data는 해당 순서로 정렬됩니다. zsh쉘을 통해 ,,,... 순서를 사용하여 ./file*.dat(n)얻을 수 있습니다../file1.dat./file2.data./file3.data./file10.dat./file11.dat

관련 정보