通过 shell 脚本从 CSV 文件中删除没有数据但只有逗号的最后一行

通过 shell 脚本从 CSV 文件中删除没有数据但只有逗号的最后一行

我正在生成一个 CSV 文件,理想情况下应该有 1 行或 2 行数据,但它就像

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

请注意,您无法重定向到正在读取的相同名称,因为 shell 会在执行之前截断(清空)您重定向到的文件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

答案由 Kusalananda 提供

sed -n -i '/[^,]/p' filename.csv

对我来说效果很好。

另外,我找到了使用 awk 和 file 的解决方法

awk -F ',' '$2>" " {print $0}' file.csv > temp.csv && mv temp.csv file.csv

这不是理想的解决方案,但也有效

相关内容