【问题标题】:Using the result of grep to sort files使用 grep 的结果对文件进行排序
【发布时间】:2021-03-30 06:07:31
【问题描述】:

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

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

如何根据 grep 找到的内容按新月顺序对行进行排序?

【问题讨论】:

  • 你想要什么结果?您想要这些行按排序顺序,还是按相同顺序列出相应文件名?
  • 如果你能解释一下"crescent order" 是什么会有所帮助.. 就像月圆月的第一个和最后一个季度??这是倒数第二个字段的简写吗?

标签: sorting awk sed grep


【解决方案1】:

您能否尝试使用所示示例进行以下、编写和测试。考虑到您需要按第二个字段的递增值进行排序。由于 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

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

另外我们不需要对这个单独使用cat命令,我们可以通过grep命令直接读取Input_file。

【讨论】:

  • 这可行,但在我的具体情况下,++ 内的数字有时会位于不同的位置。
  • @CARMINATISOUND,您会提到在您的问题中,将始终仅根据问题的示例提供答案,让我现在解决它。
  • @CARMINATISOUND,您能否现在尝试我编辑的解决方案,然后让我知道结果如何?另外这里不用cat命令,直接把Input_file(有要读取值的文件)读到grep命令即可。
  • 非常好!谢谢你。我添加了 -n 选项进行排序,它按预期工作。
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2020-01-27
相关资源
最近更新 更多