라는 파일이 있습니다PKA1
이 폴더에는 다음과 같은 이름의 여러 폴더가 있습니다.
1eV
, 2eV
....30eV
각 하위 폴더에는 다음과 같은 파일이 있습니다.PKA.dump
PKA.dump
각 하위 폴더의 20행을 이름이 지정된 폴더로 복사하고 싶습니다 data.txt
.
find 명령을 사용하여 모든 파일을 찾을 수 있다는 것을 알고 있습니다 PKA.dump
.
find . -type f -name PKA.dump
나는 또한 혼자서 글을 쓸 수 있다는 것을 알고 있습니다 sed
.
sed -i '20q;d' PKA.dump > data.txt
그러나 모든 파일을 반복하여 예를 들어 사용하려고 하면 sed
다음과 같습니다.
find . -type f -name PKA.dump | sed -i '20q;d' PKA.dump > data.txt
다음 오류가 발생합니다.
sed: can't read PKA.dump: No such file or directory
도움이 필요하세요? PKA.dump
파일 1eV
등 2eV
의 20행을 순차적으로 3eV
이름이 지정된 파일 에 넣고 싶습니다 data.txt
.
답변1
find . -name PKA.dump -type f -exec awk '
FNR == 20 {print; nextfile}' {} +
nextfile
, 사용 가능한 경우(GNU awk 및 FreeBSD와 최신 버전 mawk
의곧 표준에 추가될 예정) 다음 파일로 이동합니다. 그렇지 않은 경우 무시됩니다(변수 역참조와 마찬가지로 nextfile
). 여전히 작동하지만 파일 전체를 읽습니다.
여전히 다음을 수행할 수 있습니다.
find . -name PKA.dump -type f -exec sed '20q;d' {} \;
그러나 이는 sed
파일당 하나의 명령을 실행하는 것을 의미하므로 효율성이 떨어집니다.