複数のファイルの操作と保存

複数のファイルの操作と保存

約2,000個のファイルがあり、26個の列のうち12個の列を抽出し、抽出した情報を新しいファイルに保存しようとしています。私は単一のファイルを使ってこれをやってきました。

cat "oldfile.csv" | grep -v "=" | cut -f 1-4,9,14,15,19,21,22,24,26 > newfile.csv

一連のUnixコマンドを使用してすべてのファイルを処理する方法が必要です。

どんな助けでも大変感謝します。

答え1

シェルはループを実行できます。

for i in *.csv; do 
    grep -v "=" "$i" | cut -f 1-4,9,14,15,19,21,22,24,26 > "new.$i"
done

ただし、フィールドにフィールド区切り文字が含まれていると、この操作は失敗します。しかし、ループによるものではありません。

答え2

特定のファイルをスクリプトの引数として提供したい場合(例:process_csv.sh

#!/bin/bash
for arg; do
    grep -v "=" "${arg}" | cut -f 1-4,9,14,15,19,21,22,24,26 > "${arg}.new"
done

これで、次のようにこのスクリプトを実行できます。

./process_csv.sh *.csvまたは

./process_csv.sh first.csv fifth.csv seventh.csvまたは

./process_csv.sh somefile1 somefile2

誰が指摘する前に上記のスクリプトでパラメータを維持したくない場合は、shiftスクリプトで使用できます。

関連情報