
mvプレフィックスが付いた複数のcsvファイルがあります。私の目標は、5つの列(他の列は除く)を含むファイルから特定の列(名前または番号)を削除することです。
for f in mv*.csv
do
ln= $(echo "$f" | awk '{print NF}' | sort -nu | head -n 1)
if [ln==4]
then
$(echo "$f" cut -d, -f2,4 --complement >> $f)
fi
done
3行目では、「コマンドが見つかりません」というエラーが発生したため、「切り取り」部分をテストしませんでした。私は何を見逃していますか?
PS - bashをよりよく理解するために私のエラーを理解したいのですが、sed/awk/python/何かを使用するソリューションも良いでしょう。
ありがとう
答え1
csvcut
以下で使用csvkit
:
$ csvcut -C 5 data.csv >data-new.csv
その後、列5が削除され、data.csv
結果がdata-new.csv
。
$ csvcut -C "comment" data.csv >data-new.csv
comment
これにより、名前付き列(ファイルのヘッダー行に基づく)が削除され、data.csv
結果がdata-new.csv
。
答え2
ファイル名をawkに渡しますが、その内容は渡さなければなりません。
ln= $(cat "$f" | awk '{print NF}' | sort -nu | head -n 1)
またはより良い:
ln= $(awk '{print NF}' "$f" | sort -nu | head -n 1)