仅保存两个 grep 合并中的第一个匹配项



我有以下脚本:

#!/bin/bash
echo "INPUT"
echo 
# Grep array 1
grep -v '.*SYSTSIN' input.txt | grep -oPh '(?!.*?.tmp)[^|]+|s+K[^|]+(?=|s+OK.*?[INPUT)' |  uniq -i |
while read file; do
    echo "$file"
done
echo
echo "OUTPUT"
echo 
# Greap array 2
grep -Poh '(?!.*?.tmp)[^|]+|s+K[^|]+(?=|s+OK.*?[OUTPUT)' input.txt | uniq -i |
while read file; do
    echo "$file"
done

这是输入.txt文件中的内容:

 234234 |  robert.txt| OK|  INFO| [INPUT]
  54656 |   maria.txt| OK|  INFO| [OUTPUT]
 078978 |   maria.txt| OK|  INFO| [INPUT]
      8 |  robert.txt| OK|  INFO| [OUTPUT]
     57 |   steve.txt| OK|  INFO| [INPUT]
    567 |   steve.txt| OK|  INFO| [OUTPUT]
  09832 |   marta.txt| OK|  INFO| [OUTPUT]
     99 |   marta.txt| OK|  INFO| [INPUT]
    ASD |    nick.txt| OK|  INFO| [INPUT]
    RFE |   jesus.txt| OK|  INFO| [OUTPUT]

打印的结果是:

INPUT
robert.txt
maria.txt
steve.txt
marta.txt
nick.txt
OUTPUT
maria.txt
robert.txt
steve.txt
marta.txt
jesus.txt

现在我正在尝试只获取每个文件名的第一个出现并将其保存在相应的数组中。我的意思是:如果匹配项保存在两个数组之一中,则下面的文件名的所有匹配项都将被忽略。

在这些条件下,我正在寻找的结果是:

INPUT
robert.txt
steve.txt
nick.txt
OUTPUT
maria.txt
marta.txt
jesus.txt

我可以用awk命令做到这一点吗?你还有其他想法吗?可能正在逐行阅读?

使用 awk,您可以构造一个关联数组,其中每个文件都与第一个数据("输入"或"输出")相关联:

awk -F"|" '{if(result[$2]==""){result[$2]=$5}} END{for(file in result){print result[file] file}}' input.txt|sort

这一个衬里给你这个输出:

[INPUT]    nick.txt
[INPUT]   steve.txt
[INPUT]  robert.txt
[OUTPUT]   jesus.txt
[OUTPUT]   maria.txt
[OUTPUT]   marta.txt

你可以处理这些数据。

相关内容

  • 没有找到相关文章

最新更新