한 줄에 여러 파일에 대해 여러 명령 실행

한 줄에 여러 파일에 대해 여러 명령 실행

여러 파일에 대해 동일한 줄에서 여러 명령을 실행하려고 합니다. 저는 Linux에 대한 경험이 거의 없으며 다음 명령을 사용하는 데 문제가 있습니다.

tail -n +3 "/usr/local/tmp/csce215/election2008/"*/*.csv | head -n -1 > polls.csv

tail과 head를 연속해서 사용하여 각 파일의 "중간 부분"을 얻으려고 합니다. 불행히도 tail은 모든 파일에 대해 올바르게 실행되지만 head는 마지막 파일에 대해서만 실행되는 것 같습니다. 하나의 명령으로 이것이 가능합니까, 아니면 이를 수행하는 더 좋은 방법이 있습니까? 나는 머리와 꼬리를 사용하는 것을 선호합니다.

답변1

문제는 tail에 전달할 단일 데이터 스트림을 생성하는 것인데 head, 이것이 거기에서 사용됩니다.

대신 각 파일을 처리 tail하고 headpolls.csv 파일의 결과를 사용합니다.

코드 줄은 다음과 같습니다.

shopt -s nullglob; for name in "/usr/local/tmp/csce215/election2008/"*/*.csv; do echo "==> $name" >> polls.csv; tail -n +3 "$name" | head -n -1 >>polls.csv; echo "" >> polls.csv; done;

shopt -s nullglob 찾을 *.csv 파일이 없는 경우 불필요한 작업을 방지합니다.

물론 리디렉션을 위해 파일에 추가를 사용하므로 매번 사용 후 설문 조사 파일을 삭제해야 합니다. 그렇지 않으면 파일이 계속 커집니다. 또는 처음부터 중단하도록 명령을 수정합니다.

echo "" > polls.csv; shopt -s nullglob; for name in "/usr/local/tmp/csce215/election2008/"*/*.csv; do echo "==> $name" >> polls.csv; tail -n +3 "$name" | head -n -1 >>polls.csv; echo "" >> polls.csv; done;

화면 제한으로 인해 한 줄로 표시되지 않지만 어쨌든 한 줄로 입력하세요. 복사/붙여넣기는 한 줄로 유지해야 합니다.

관련 정보