궁극적으로 각 하위 디렉터리의 각 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' _ {} +