input.txt
이라는 이름의 100개 하위 폴더 각각에 텍스트 파일이 있습니다 sample_1, ..., sample_100
.
input.txt
다음을 사용하여 모든 파일의 첫 번째 줄을 추출할 수 있습니다.
find -name input.txt -exec awk 'FNR == 1 {print $0}' > out.txt {} \;
input.txt
그러나 이것은 현재 디렉토리의 파일에 대한 모든 것의 첫 번째 줄을 인쇄합니다 out.txt
.
내가 원하는 것은 각 하위 폴더에서 out.txt
해당 특정 하위 폴더의 첫 번째 줄입니다. input.txt
예를 들어 out.txt
내부 sample_57
하위 폴더 의 첫 번째 줄 input.txt
은 입니다 sample_57
.
이를 달성하는 방법에 대한 아이디어.
답변1
head
대신 사용하십시오 awk
. 또한 -execdir
대신을 사용하면 -exec
실행하려는 명령을 더 쉽게 읽을 수 있습니다.
find -type f -name input.txt -execdir sh -c 'head -1 input.txt > out.txt' \;
답변2
out.txt
각 하위 폴더의 첫 번째 줄input.txt
은
find
+sed
해결책:
find . -type f -name input.txt -exec sh -c 'out_fn="${1%/*}/out.txt"; sed -n "1p" "{}" > "$out_fn"' _ {} \;
out_fn="${1%/*}/out.txt"
- 길출력 파일 이름체재/path/to/subfolder/out.txt
sed -n "1p" "{}"
- 입력 파일에서 첫 번째 줄을 추출합니다.{}
답변3
그냥 해
find . -type f -name "input.txt" -execdir awk 'NR==1{print $0>"out.txt"}' '{}' +
exit
또는 첫 번째 줄을 인쇄한 후 종료되는 처리기를 사용할 수 있으며 awk
첫 번째 줄만 인쇄하고 파일 끝까지 전체 파일을 처리할 필요가 없을 때 더 좋습니다.
find . -type f -execdir awk '{print $0>"out.txt";exit}' '{}' +