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
대신 사용하세요 . 제공된 모든 입력에 대한 총 레코드 수입니다. 현재 처리 중인 입력 파일의 레코드 번호입니다.NR
NR
FNR
그래서:
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