删除csv文件中的空行

时间:2014-03-13 00:16:38

标签: linux bash sed awk vi

我有一个包含400万行的文件,每行都以char $结尾,但我在拼接网站时错误地在行分隔符后添加了一行,所以现在它看起来像这样:

fist name, last name, phone, address, postal code, city, region,$

$

fist name, last name, phone, address, postal code, city, region,$

$

新行'$'当然只显示如果我使用:set list,但我正在尝试将此文件用于mysql中的批量插入,我现在遇到问题。

我想将文件更改为:

fist name, last name, phone, address, postal code, city, region,$

fist name, last name, phone, address, postal code, city, region,$

我该怎么做?用sed或awk甚至vi?抬头看看我发现的并不适用于这种情况。

请不要考虑上面显示的额外空行。

提前致谢

3 个答案:

答案 0 :(得分:7)

使用sed删除空白行:

sed -i '/^$/d' yourfile.csv

删除由单个$组成的行:

sed -i '/^$$/d' yourfile.csv

大多数版本的sed支持-i开关;如果你没有,你将需要例如sed '/^$$/d' yourfile.csv > newfile.csv

删除带空格的空行更复杂。这通常有效:

sed '/^ *$/d' yourfile.csv

如果这还不够,请尝试同时检查标签。对于旧的sed,这将有效:

sed '/^[ X]*$/d' yourfile.csv

其中X这里有一个标签,通过 Control-V 标签输入。

较新的sed将采用[ \t\r]*\s*[[:space:]]*,有时需要-E切换。

答案 1 :(得分:1)

grep可以通过匹配(或负匹配)对正则表达式过滤行。要排除空行:

grep -v '^$' yourfile.csv > yourfile_fixed.csv

答案 2 :(得分:0)

以下是您的选择:

使用awk

awk 'NF' file > tmp && mv tmp file

使用sed(就地更改,因此请确保使用-i.bak备份文件):

sed -i '/^$/d' file

使用vi

:g/^$/d