find 명령을 사용하여 하위 폴더의 텍스트 파일에서 줄 추출

find 명령을 사용하여 하위 폴더의 텍스트 파일에서 줄 추출

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}' '{}' +

관련 정보