理想的には1行から2行のデータが必要なCSVファイルを作成していますが、次のようになります。
11,ABC,3,4,5,6
,,,,,
私は成功せずに空行を削除するためにsedとawkコマンドを使ってみました。
sed -i 's/,,//g' fileName.csv
(奇数のカンマがある場合、これは動的解決策ではないため)
awk -F, 'length>NF+1' fileName.csv > fileName.csv
(ファイルに入れようとすると、ファイルからすべての行が削除されます。おそらく、sedコマンドとawkコマンドに慣れていないのは問題かもしれません。)
答え1
データ転送
grep '[^,]'
非カンマ文字を含む行が抽出されます。その行を効果的に削除します。ただカンマを含めます。
例えば:
grep '[^,]' filename.csv >newname.csv
シェルは、リダイレクトするファイルを実行する前に切り取る(空にする)ため、読んでいるのと同じ名前にリダイレクトできませんgrep
。
sed
実装が次の構文をサポートしている場合は、sed
内部編集で行うこともできます。
sed -n -i '/[^,]/p' filename.csv
または
sed -i '/[^,]/!d' filename.csv
awk -i inplace '/[^,]/' filename.csv
答え2
要求されたタスクを実行する簡単な方法はRemove the last rows with no data but just commas from a CSV file through shell script
次のとおりです。
tac file | awk '/[^,]/{f=1} f' | tac
例えば:
$ cat file
a,b,c
d,e,f
,,,
g,h,i
,,,
,,,
$ tac file | awk '/[^,]/{f=1} f' | tac
a,b,c
d,e,f
,,,
g,h,i
答え3
クサラナンダが提供した答え
sed -n -i '/[^,]/p' filename.csv
私にとってうまくいきます。
また、awkとfileを使用して解決策を見つけました。
awk -F ',' '$2>" " {print $0}' file.csv > temp.csv && mv temp.csv file.csv
これは理想的な解決策ではありませんが、うまくいきます。