발견된 파일 목록에서 n~m 라인 추출

발견된 파일 목록에서 n~m 라인 추출

궁극적으로 각 하위 디렉터리의 각 CSV에서 행 3-53을 가져와야 합니다.

다음과 같은 파일에서 다음 줄을 가져왔습니다("cat"이 반드시 필요한 것은 아닙니다).

cat /[path]/[file].csv | head -53 | tail -51

제가 필요한 파일은 다음과 같습니다("찾기"필수의):

find /[path]/ -name "*.csv"

문제는 두 개를 연결할 수 없다는 것입니다. 누군가 나를 올바른 방향으로 밀어줄 수 있나요?

답변1

이 시도:

find /path/to/file/ -maxdepth 1 -type f -name '*.csv' -print0 | while read -d '' -r file; do sed -n '3,53p' $file; done

이 옵션 은 print0파일 이름에 있을 수 있는 모든 공백 문자를 처리합니다.

답변2

내가 올바르게 이해했다면 다음 내용이 도움이 될 것이라고 생각합니다.

스크립트/라인:

$ for csv_files in $(find /home/t1/ -name "*.csv"); do echo $csv_files ; done

산출:

/home/t1/t4/t4.csv
/home/t1/t1/t1.csv
/home/t1/t2/t2.csv
/home/t1/t3/t3.csv

echo대신 두 번째 명령을 삽입할 수 있습니다.cat $csv_files | head -53 | tail -51

완성도를 높이기 위해 echo다음 코드 줄을 다음으로 대체했습니다.

$ for csv_files in $(find /home/t1/ -name "*.csv"); do cat $csv_files | head -53 | tail -51; done 

답변3

findself를 사용하여 이 작업을 수행할 수 있습니다.

find path -type f -name '*.csv' \
-exec sh -c 'for f; do head -n 53 "$f" | tail -n 51; done' _ {} + 

관련 정보