【问题标题】:How to extract this particular string using Unix/Awk/grep如何使用 Unix/Awk/grep 提取这个特定的字符串
【发布时间】:2014-03-29 20:15:25
【问题描述】:

我有一个看起来像这样的日志文件

Connected to feeder version 2.1 09:28:30 29/03/2014 Loading Account 01234567EUR
09:28:30 29/03/2014 Loading Account 0123456755JPY
09:28:30 29/03/2014 Loading Account 0123426567INR
09:28:30 29/03/2014 Loading Account 012345698887USD
09:28:30 29/03/2014 Loading Account 012343422567EUR
09:28:30 29/03/2014 Account 0234456783388KRY not set up
09:28:30 29/03/2014 Account 0234454467888CNH not set up
09:28:30 29/03/2014 Error : Closing Balance of Account 02344567888GBP Doesn't match

我想提取存在期末余额不匹配或未设置帐户的帐号,并将这些帐户放入新文件中以供我进一步处理。第一步是我使用了 grep -il '未设置'但在那之后我如何提取帐号,模式似乎非常随机(不确定我是否可以使用基于分隔符的 awk)唯一可以确定的模式是帐号的最后 3 个字符是货币.那么是否可以为此使用 egrep 和 regex 。谢谢

【问题讨论】:

    标签: regex unix awk grep


    【解决方案1】:

    这是awk的一种方式:

    $ awk '
    /not set up/ {
        for(i=1;i<=NF;i++) 
            if($i~/Account/) print $(i+1)":Not Set Up" > "Review.txt"
    }
    /Error/ {
        for(i=1;i<=NF;i++)
            if($i~/Account/) print $(i+1)":Mismatch" > "Review.txt"
    }' file
    

    这将创建以下文件:

    $ cat Review.txt
    0234456783388KRY:Not Set Up
    0234454467888CNH:Not Set Up
    02344567888GBP:Mismatch
    

    【讨论】:

    • 为您的回答付出了很多,就像一个魅力。我正准备通过使用 egrep 让这变得更复杂,结果却一无所获。
    【解决方案2】:

    我会使用 sed,不使用 grep:

    sed -n "
        s/.* Closing Balance of Account \(.*\) Doesn't match/\1/p;
        s/.* Account \(.*\) not set up/\1/p
      "
    

    根据口味调整,例如如果您想在任一案例旁边打印一些内容,以确定哪些帐户有哪些问题。

    【讨论】:

    • 非常感谢您的回答,效果很好。基本上这些是我必须在数据库中查找并获取主帐号然后添加评论/原因的子帐号。
    【解决方案3】:

    您可以使用以下 grep 语句来获取所需的帐号:

    grep 'not set up' file.txt | grep -Po '\d+[A-Z]{3}'
    grep 'Error' file.txt | grep -Po '\d+[A-Z]{3}'
    

    【讨论】:

      【解决方案4】:

      另一种方式,从命令行缩短,只是帐号:

      awk -F'^.*Account|[ \t]*' '/Error|set/{print $3}' file
      

      或连同原因:

      awk -F'^.*Account[ \t]*' '!/Loading/{print $2}' file
      

      【讨论】:

        猜你喜欢
        • 2022-12-06
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-19
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        相关资源
        最近更新 更多