使用gawk,awk或sed删除行

时间:2017-01-22 20:35:23

标签: awk sed gawk

原始问题

我有一个逗号分隔的.csv文件,如下所示:

header1,header2,header3
value10,value20,value30
value11,value21,value31
,,
,,
,,

如何删除csv末尾的“空行”?空行的数量并不总是相同,但可以是任何数字。

如何将修改后的csv保存到新文件中?

Thor编辑的问题

我有一个逗号分隔的.csv文件,如下所示:

header1,header2,header3
value10,value20,value30
value11,value21,value31
[empty line]
[empty line]
[empty line]

如何删除csv末尾的“空行”?空行的数量并不总是相同,但可以是任何数字。

如何将修改后的csv保存到新文件中?

4 个答案:

答案 0 :(得分:1)

这取决于你对空行的定义。如果它真的是为空,因为只有换行符,使用awk你可以:

IDK

$ awk '/./' file 即,如果只有换行符(awk中默认为/^$/),则打印出来。如果你需要外出到另一个文件:

RS

如果 empty 的定义可以容忍记录中的空格以及换行符:

$ awk '/./' file > file2

更新:A-ha,空虚的定义归结为所有逗号。 OP在评论中提到“空行”总是放在最后所以一旦我们遇到第一个行(即除了记录中的逗号= { {1}} = $ awk '/^[^ ]+$/' file - 抱歉双重否定),退出。

^,+

答案 1 :(得分:0)

快速而肮脏(但有效)的方法是在键盘上找到不在您文件中的字符,例如µ。然后输入:

tr '\n' 'µ' < myfile.csv | sed -e 's/[,µ]*$//' | tr 'µ' '\n' > out.csv

没试过,但你可以根据自己的需要调整这个想法。也许您还必须在括号表达式中添加空格字符(或制表符等)。

想法是用(临时)µ替换'end of line'字符以获得(临时)单行文件;然后使用一个非常基本的正则表达式来删除你想要的东西;最后恢复'行尾'字符。

答案 2 :(得分:0)

使用以下 -

sed -i '/^$/d' file

说明:

 ^$ : To search line which doesn't contain anything from start(^) to last($)
 d  : To delete that searched line 
 i  : to make the changes permanent so that you don't need to redirect to another file and then rename it again.

答案 3 :(得分:0)

您的问题并不清楚,但听起来您只需要:

&#10;