gpt4 book ai didi

bash - 查找前一行没有匹配数字的行

转载 作者:行者123 更新时间:2023-11-29 09:38:56 24 4
gpt4 key购买 nike

我试图在文件中查找那些行中的数字不在其前一行中的行。该文件大约有 400000 行。这是输入文件的示例:

320 5120
240 326 5120
240 326 5120
241 333 514
240 326 5120
240 326 5120
320 5120
240
100 112
240 326 5120
240 326 5120
320 5120

预期输出结果为:

241 333 514
240 326 5120
240
100 112
240 326 5120

到目前为止我可以找到这个命令:

$ awk '!seen[$1]++' file 

320 5120
240 326 5120
241 333 514
100 112

我可以获得第 1 列的唯一编号,并且我可以对其他列单独执行相同的操作。我能以某种方式从这个命令中获取我想要的信息吗?任何帮助将不胜感激。

最佳答案

一个 Perl 命令行程序(“one”-liner),假设文件中除了数字之外的其他内容

perl -wnE'
@n = /([0-9]+)/g;
say "@n" if not grep { exists $seen_nums{$_} } @n;
%seen_nums = map { $_ => 1 } @n
' data.txt

这将打印所需的输出。它还打印第一行(正确)。由于该程序解析行中的数字,因此它可以用于带有标题、纯文本(注释?)行等的文件。

但是如果数据确定只有数字,那么我们可以使用 Perl 的 -a switch @F 数组中每行上的单词都可用。还缩小了一点以实际适合一条线

perl -wlanE'grep exists $n{$_}, @F or say; %n = map { $_=>1 } @F' data.txt

开关的简要说明(请参阅上面链接的文档)

  • -w 打开警告

  • -l 去掉换行符,并可以将其重新粘上,还有一些微妙之处

  • -a 打开“自动分割”(与 -n-p 一起使用时),以便 @F在程序中可用,其中包含单词就行。在较新的 Perls 上,这也会设置 -n

  • -n 对于处理文件或 STDIN 至关重要 - 打开资源并设置行循环。使用-MO=Deparse运行来看看它做了什么

  • -E -e 使其将以下引号之间的所有内容计算为 Perl 代码。如果使用大写字母 (E),它也会打开 feature s,我主要用于 say。 (这样做有缺点,因为它启用了所有功能,并使事物不再向后兼容。)


注意:通过在打印中添加条件 $.!=2 可以省略第一行

关于bash - 查找前一行没有匹配数字的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56487102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com