シェルスクリプトを使用して、CSVファイルからデータがなく、カンマのみの最後の行を削除します。

シェルスクリプトを使用して、CSVファイルからデータがなく、カンマのみの最後の行を削除します。

理想的には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

GNUを使用して所定の位置に編集awk:

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

これは理想的な解決策ではありませんが、うまくいきます。

関連情報