我有一个这样的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
您可以在其上继续处理。