1行に複数のファイルに対して複数のコマンドを実行する

1行に複数のファイルに対して複数のコマンドを実行する

複数のファイルに対して同じ行で複数のコマンドを実行しようとしています。私はLinuxの経験がほとんどなく、次のコマンドの使用に問題があります。

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

tailとheadを連続して使用して、各ファイルの「中間部分」を取得しようとしています。残念ながら、tailはすべてのファイルに対して正しく実行されますが、headは最後のファイルに対してのみ実行されるようです。 1つのコマンドでこれが可能ですか、それともこれを行うより良い方法がありますか?私は頭と尾を使用することを好みます。

ベストアンサー1

問題はtailに渡す単一のデータストリームを生成することですがhead、これがそこで使用されます。

代わりに各ファイルを処理し、tailpolls.csvheadファイルの結果を使用します。

コード行は次のとおりです。

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;

画面制限のため、1行で表示されませんが、とにかく1行で入力してください。コピー/貼り付けは1行にしてください。

おすすめ記事