【问题标题】:How to print two fields from a text file?如何从文本文件中打印两个字段?
【发布时间】:2020-06-19 21:49:06
【问题描述】:

我的机器中有一个日志文件,其内容如下。

2020-06-18 00:01:31|INFO|0||pro_upl_postpaid_trap|ComUpload|CUploadProcessRemoteFile.cpp[95]|rename remote file success,source filename=/file_src/localusers/data/TRAP_CBS/recv/ovou20200617_999_400280.unl.temp,destination filename=/file_src/localusers/data/TRAP_CBS/recv/**ovou20200617_999_400280.unl**
2020-06-18 00:01:32|INFO|0||pro_upl_postpaid_trap|ComUpload|CUploadProcessRemoteFile.cpp[95]|rename remote file success,source filename=/file_src/localusers/data/TRAP_CBS/recv/ocom20200617_512_400106.unl.temp,destination filename=/file_src/localusers/data/TRAP_CBS/recv/ocom20200617_512_400106.unl
2020-06-18 00:01:32|INFO|0||pro_upl_postpaid_trap|ComUpload|CUploadProcessRemoteFile.cpp[95]|rename remote file success,source filename=/file_src/localusers/data/TRAP_CBS/recv/ocom20200617_515_400184.unl.temp,destination filename=/file_src/localusers/data/TRAP_CBS/recv/ocom20200617_515_400184.unl
2020-06-18 00:01:33|INFO|0||pro_upl_postpaid_trap|ComUpload|CUploadProcessRemoteFile.cpp[95]|rename remote file success,source filename=/file_src/localusers/data/TRAP_CBS/recv/odata20200617_517_400092.unl.temp,destination filename=/file_src/localusers/data/TRAP_CBS/recv/odata20200617_517_400092.unl

我想从这个日志文件中打印 3 个字段,如下所示:

2020-06-18 00:01:31|**ovou20200617_999_400280.unl**

我能够打印最后一个字段,但无法同时打印日期/时间 (2020-06-18 00:01:31) 和文件名 (ovou20200617_999_400280.unl)..!!!

cat pro_upl_*_trap_$YestodayDate*|grep 'CUploadProcessRemoteFile.cpp' |awk -F "/" '{print $19}'

任何提示/帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: linux awk


    【解决方案1】:

    不知道为什么当 CUploadProcessRemoteFile.cpp 出现在每一行中时,你为什么要对它进行 grep-ing,但假设你确实有理由这样做,那么当你使用 awk 时,你永远不需要 grep,你也不需要需要cat 才能打开awk 的输入文件:

    $ awk -F'[|/]' -v OFS='|' '/CUploadProcessRemoteFile\.cpp/{print $1, $NF}' file
    2020-06-18 00:01:31|**ovou20200617_999_400280.unl**
    2020-06-18 00:01:32|ocom20200617_512_400106.unl
    2020-06-18 00:01:32|ocom20200617_515_400184.unl
    2020-06-18 00:01:33|odata20200617_517_400092.unl
    

    【讨论】:

      【解决方案2】:

      您可以将 awk 与多个分隔符一起使用:

      awk -F'[|/]' '{print $1, $NF}'
      

      【讨论】:

      • 这与我一小时前发布的答案相同,但没有 OP 所需的额外功能。
      猜你喜欢
      • 2021-07-25
      • 2013-04-07
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      相关资源
      最近更新 更多