我正在生成一个 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
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
这不是理想的解决方案,但也有效