我有一个包含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?抬头看看我发现的并不适用于这种情况。
请不要考虑上面显示的额外空行。
提前致谢
答案 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