【问题标题】:AWK command for *用于 * 的 AWK 命令
【发布时间】:2019-03-06 22:59:32
【问题描述】:

我正在尝试使用 awk 检索文本的第四列,其中包含文件第二行的条件,但是我得到一个空白值作为输出。

这是我的输入文件内容 第一行:xxxx 第二行:GS*HP*IRX*029053964*20180611*114500

我需要在输入文件中查找条件 HP*IRX* 并打印值 20180611(第 4 列)

这是我的脚本

filedate=$(awk -F "*" '/HP*IRX/{print $4}' $file)
  echo $filedate

请告知我缺少的内容.. tnx!

【问题讨论】:

  • 您可能会认为HP*IRX 是一列,或者20180611 是第四列,但awk 不会在这两个方面达成一致。你的第二列是HP,你的第三列是IRX,你想打印出第五列($5)。

标签: shell unix


【解决方案1】:

问题在于* 是正则表达式中的特殊字符。 /HP*IRX/ 将匹配 "H" 后跟 零个或多个 "P" 后跟 "IRX"

你想要

awk -F'*' '$2 == "HP" && $3 == "IRX" {print $5}'

或者,如果你真的想要一个正则表达式

awk -F'*' '/\*HP\*IRX\*/ {print $5}'

我在前面放了一个\*,这样你就不会匹配fooHP*IRX的行

【讨论】:

  • 谢谢,它有效.. 我还有另一个相关问题.. 我如何搜索多个条件.. 例如,我的输入文件可以包含“”或“|” ,我正在尝试类似 recamt=$(awk -F "" '/BPR/{print $3}' $file) || $(awk -F "|" '/BPR/{print $3}' $file)..
  • 您评论的格式已损坏。请提出一个新问题。
  • 弄明白了,使用 awk -F'[|*]' 并且成功了..谢谢!!
  • 它可能没有解决 .. 让我在一个单独的问题中发布它,因为它破坏了我的格式..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
相关资源
最近更新 更多