首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在文件中选择大量(特定的)行

在文件中选择大量(特定的)行
EN

Stack Overflow用户
提问于 2014-10-31 08:52:56
回答 4查看 330关注 0票数 1

我想从大文件中选择大量的特定行。

使用perl,我创建了一个这种样式的命令(此处打印第2行和第4行):

代码语言:javascript
运行
复制
sed -n -e 2p -e 4p $file

并使用system()命令启动它。

这很好,除非要从文件中选择的行数变得相当大。它目前适用于10,000行,但不适用于我希望选择17,000行的另一个文件。可以传递给sed的参数数量是否有限制?是否有其他UNIX工具可供使用?谢谢你的帮忙

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-31 10:35:31

其中一个sed命令:

使用;分隔符而不是几个-e 2p

代码语言:javascript
运行
复制
sed -n -e '2p;4p;12p' file

如果对bash命令行来说太长

2p;4p;12p中创建一个具有相同结构的临时文件,并使用-f选项

代码语言:javascript
运行
复制
sed -n -f TemporaryFile file
票数 1
EN

Stack Overflow用户

发布于 2014-10-31 10:05:58

您肯定在文件中的某个位置有您想要的行列表,所以让我们假设该文件名为lines.txt,如下所示:

代码语言:javascript
运行
复制
1
2
4
7

现在,你可以这样做:

代码语言:javascript
运行
复制
awk 'FNR==NR{wanted[$0]++;next} FNR in wanted' lines.txt file

上面写着..。FNR==NR意味着第一组大括号仅适用于lines.txt文件的处理,在处理该文件时,将所需的行号存储在数组wanted[]中,然后移到下一行。第二部分,FNR in wanted适用于第二个文件file的处理。它说,如果行号(FNR)位于数组wanted[]中,则打印该行。

票数 4
EN

Stack Overflow用户

发布于 2014-10-31 09:05:02

这不是sed限制,而是bash命令行长度限制:它是getconf ARG_MAX字节最大值(在Linux上,我看到了这个值的值从131072到2621440)。

勒内·尼芬格格的评论是明智的:在*NIX世界里,Perl是解决这类问题的更好选择。

如果您描述需要如何选择要提取的行(即:从i到j?或者一个特定行的列表?,一些不同的逻辑?),应该很容易给您一个代码示例.

更新:下面的给出了第一个用例的示例。当然,如果您给出了一些用例的例子,如果可以找到一个模式,那么应该很容易简化第二个更通用的用例的解决方案.

代码语言:javascript
运行
复制
#!/usr/bin/perl
#
# Print a range of lines from a text file.
# Usage: extract-a-range-of-lines.pl first-line last-line input-file

# use ARGV to verify the number of perl command line arguments
@ARGV == 3 or die "Usage: $0 first-line last-line input-file\n";
my ($first_line, $last_line, $filename) = @ARGV;

open(my $FILE, "<", $filename) or die "Could not read from $filename ($!)"; # open the input file   
# loop through the input file
my $count = 1;
while (<$FILE>) {
  last if ($count > $last_line); # break loop when you get to the last line   
  print $_ if ($count >= $first_line); # print the current line if the line number is greater than first param
  $count++; # increment the line counter
}
close $FILE; # close input file
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26670650

复制
相关文章

相似问题

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