約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
スクリプトで使用できます。