如何保存 grep 匹配的行



我有一个这样的grep:

iarr=`grep -Poh '.*INPUT' file.txt`
oarr=`grep -Poh '.*OUTPUT' file.txt`

所以有了这个文件的内容.txt:

INPUT  hello.txt
OUTPUT stack.txt
INPUT  stack.txt
OUTPUT hello.txt
INPUT  overflow.txt
OUTPUT overflow.txt
OUTPUT byebye.txt
INPUT  byebye.txt
INPUT  nick.txt
OUTPUT jesus.txt

Te 输出将为:

亚尔

INPUT hello.txt
INPUT stack.txt
INPUT overflow.txt
INPUT byebye.txt
INPUT nick.txt

OUTPUT stack.txt
OUTPUT hello.txt
OUTPUT overflow.txt
OUTPUT byebye.txt
OUTPUT jesus.txt

好吧,但我想知道输入中需要哪些文件名以及输出是什么,我的意思是:

  • 如果 INPUT 文件在实际行的下方行中具有 OUTPUT(同一文件),则此项将从
  • 桨中删除。
  • 如果输出文件在实际行的上方行中有输入(同一文件),则此项将从 iarr 中删除。

在这些条件下,结果将如下所示:

亚尔

INPUT hello.txt
INPUT overflow.txt
INPUT nick.txt

OUTPUT stack.txt
OUTPUT byebye.txt
OUTPUT jesus.txt

我正在尝试获得此结果,但我不知道如何在 grep 命令中存储正则表达式的特定匹配行......这就是我想解决这个问题的方法,你还有其他想法吗?可能正在逐行阅读...

如果我很好地理解你的问题,你只需要每个文件名的第一次出现。您可以使用awk来实现此目的:

awk '!x[$2]++' file.txt

因此会给

INPUT  hello.txt
OUTPUT stack.txt
INPUT  overflow.txt
OUTPUT byebye.txt
INPUT  nick.txt
OUTPUT jesus.txt

您可以在其上继续处理。

相关内容

  • 没有找到相关文章

最新更新