我有一个.csv文件,我想删除第355686行和第1048576行之间的行。
我在终端(在MacOSx上)使用了以下命令:
sed -i.bak -e '355686,1048576d' trips3.csv
这会生成一个名为trips3.csv.bak的文件 - 但是当我在Excel中重新打开它时,它总共有1,048,576行。
欢迎并赞赏您的任何想法或建议!
答案 0 :(得分:3)
不确定osx sed实现,但是当传递带有备份扩展的-i标志时,gnu sed实现首先将原始文件复制到指定的备份并就地修改原始文件。您应该期望在原始文件trip3.csv
中看到减少的行数答案 1 :(得分:3)
我怀疑问题是excel正在使用回车符(\ r \ n,八进制015)来分隔记录,而sed假设行由换行符分隔(\ n,八进制012);这意味着sed会将整个文件视为一个非常长的行。我不认为有一种简单的方法可以让sed将CR识别为行分隔符,但是使用perl很容易:
perl -n -015 -i.bak -e 'print if $. < 355686 || $. > 1048576' trips3.csv
(注意:如果1048576是文件中“行”的数量,则可以不使用|| $. > 1048576
部分。)
答案 2 :(得分:0)
应该完成这项工作的一些咒语(如果你安装了Ruby,显然)
ruby -pe 'exit if $. > 355686' < trips3.csv > output.csv
如果你更喜欢Perl / Python,只需按照文档做类似的事情,你应该没问题。 :)
另外,我正在使用Dave的Ruby one-liners之一。
编辑:对不起,忘了说你需要'&gt; output.csv'将stdout重定向到文件。答案 3 :(得分:0)
awk '!(NR>355686 && NR <1048576)' your_file