使用grep结果对文件进行排序

3

我需要根据grep的结果对文件进行排序。例子:

cat cuts.txt | grep -P '(?<=[+]).*(?=[+])'
text +124+ text
text +034+ text
text +334+ text

如何根据grep找到的内容,按升序对行进行排序?

1个回答

4

请您尝试下面这个已写好并经过示例测试的方法。考虑到您需要按照第二个字段的升序值进行排序,因此在此提供了一个通用解决方案,因为 OP 提到 +digits+ 值可能出现在行中的任何位置。

grep -P '(?<=[+]).*(?=[+])' Input_file |
awk '
  match($0,/\+[0-9]+\+/){
    print substr($0,RSTART,RLENGTH),$0
  }
'  | sort -k1.2 | cut -d' ' -f2-

输出结果如下。

text +034+ text
text +124+ text
text +334+ text

逻辑解释: 在使用正则表达式的awk命令中,将grep命令的输出传递给awk命令,以查找行中的+数字+值,并打印第一个匹配的值及整行。通过这样做,对于sort来说,我们始终可以在第一个字段上进行排序。一旦我们在第一个字段上进行排序,然后使用cut命令获取从第二个字段开始的所有内容,因为第一个字段是由awk命令添加的额外字段,只是为了使sort更易于操作,并不需要在实际输出中显示。

此外,我们无需使用单独的cat命令,可以直接通过grep命令读取输入文件。


那样做是可行的,但在我的特定情况下,+ + 中的数字有时会处于不同的位置。 - CARMINATISOUND
@CARMINATISOUND,你应该在问题中提到,答案将始终根据问题的示例提供,现在让我来修复它。 - RavinderSingh13
@CARMINATISOUND,你能试一下我的修改后的解决方案,并告诉我它的运行情况吗?另外,在这里我们不需要使用 cat 命令,直接读取 Input_file(包含要读取的值的文件)到 grep 命令中即可。 - RavinderSingh13
1
非常好!谢谢。我添加了-n选项进行排序,它按预期工作。 - CARMINATISOUND

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接