首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在unix中删除文件中的特定行?

问如何在unix中删除文件中的特定行?
EN

Stack Overflow用户
提问于 2012-10-22 19:13:56
回答 3查看 19.7K关注 0票数 7

我有一个非常大的文件,需要从其中删除特定的行(行号941573 )

我对这个环境有些陌生,但我一直在谷歌上搜索这个问题,但都无济于事。

我尝试过使用sed命令,但它似乎不起作用

代码语言:javascript
复制
sed -e '941572,941574d' filenameX > newfilenameY

我也试过

代码语言:javascript
复制
sed -e '941573d' filenameX > newfilenameY

然而,'newfilenameY‘文件和原始文件'filenameX’仍然包含我试图删除的行。这是一个fastq文件,尽管我看不出这有什么不同。就像我说的,我是unix的新手,所以可能我把sed命令弄错了

EN

回答 3

Stack Overflow用户

发布于 2012-10-22 19:15:02

d删除一行或多行。所以你的第二种方法是可行的。

代码语言:javascript
复制
$ sed '941573d' input > output

长例:

代码语言:javascript
复制
% for i in $(seq 1000000)
do
echo i >> input
done
% wc -l input
1000000 input
% sed '941573d' input > output
% wc -l output
999999 output
% diff -u input output                                      :(
--- input       2012-10-22 13:22:41.404395295 +0200
+++ output      2012-10-22 13:22:43.400395358 +0200
@@ -941570,7 +941570,6 @@
 941570
 941571
 941572
-941573
 941574
 941575
 941576

简短示例:

代码语言:javascript
复制
% cat input
foo
bar
baz
qux
% sed '3d' input > output
% cat output             
foo
bar
qux
票数 7
EN

Stack Overflow用户

发布于 2012-10-22 19:16:35

下面是如何从文件中删除一行或多行。

语法:

代码语言:javascript
复制
sed '{[/]<n>|<string>|<regex>[/]}d' <fileName>      
sed '{[/]<adr1>[,<adr2>][/]d' <fileName>
/.../=delimiters
n = line number
string = string found in in line
regex = regular expression corresponding to the searched pattern
addr = address of a line (number or pattern )
d = delete
票数 1
EN

Stack Overflow用户

发布于 2012-10-23 00:06:12

我生成了一个1000000行的测试文件,并测试了您的sed -e '941573d' filenameX > newfilenameY,它在Linux上运行良好。

也许我们还有一些其他的误解。行号从1开始计数,而不是从零开始。如果你从零开始计算,你会发现941572行丢失了。

你试过diff filenameX newfilenameY吗?这将突出显示任何意想不到的变化。

我不太了解FASTQ格式,但是你确定我们谈论的是文本文件的行号,而不是序列号吗?

一般的行长度限制是4096个字节,有没有超过这个限制的行?(这不太可能,但我认为这个问题是值得的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13010245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档