【问题标题】:Text parsing using AWK使用 AWK 进行文本解析
【发布时间】:2013-03-03 23:57:16
【问题描述】:

我有一个如下格式的日志文件:

MTV     (B) VAR H'03 7F5B H'147 H'72FD
        (B) VAR H'00 5B30 H'147 H'2718
        (B) VAR H'05 C41F H'147 H'3AA4
        (B) VAR H'06 4901 H'147 H'2DFD
        (B) VAR H'00 D36E H'147 H'628A
MNC     (B) VAR H'03 500A H'147 H'3B1D
        (B) VAR H'06 743C H'147 H'2F60
        (B) VAR H'04 6C8C H'147 H'88C5
MTV     (B) VAR H'00 9C7D H'147 H'2DEB
        (B) VAR H'02 0A1B H'147 H'36B2
        (B) VAR H'03 1247 H'147 H'5693
        (B) VAR H'04 C757 H'147 H'6331

大约 15000 个条目!我希望用户提供模式说 MTV 以及相关文本坐标,脚本将逐行解析它们!例如,用户提供模式为 MTV,相对坐标为(行 = 2,列 = 4)。所以输出会是这样的:

MTV 5B30
MTV 0A1B

【问题讨论】:

  • 你没有问题,我猜你想让人们用勺子喂你?
  • 为什么在输出中使用D36E 而不是0A1BD36E 位于 row5 col4 还是我误解了这个问题?
  • 抱歉@Kent 那是我的错我在测试相等性时遇到了= 而不是==,已修复!

标签: regex bash shell awk pattern-matching


【解决方案1】:
awk -v p="MTV" -v r=2 -v c=4 '$1==p{a=NR-1}NR==a+r{print p,r==1?$(c+1):$c}' file
MTV 5B30
MTV 0A1B

【讨论】:

  • 感谢您的回复,但我无法获得相关输出。它只是继续打印 MTV。有什么帮助吗?
  • 正如你在这里看到的ideone.com/BtRrQ8 问题不在于脚本。你在运行什么操作系统?你有什么版本的awk,你的实际文件格式是否与你的问题相同?
  • 我不知道文件是如何格式化的!编辑您的问题并添加具有正确格式的文件。
  • @user2173438 它没有......你一定在做一些不同的事情,但我怀疑我们会深入了解它。
  • @sudo_O r=1?$c:$(c+1) 这部分没有意义,您将列分配给r。我相信这是一个错字和微小的逻辑问题,对吧?你的意思是r==1?$(c+1):$c。然后D36E 消失了。请修复它:)
猜你喜欢
  • 2015-01-12
  • 2018-10-27
  • 2017-01-18
  • 2018-03-31
  • 2020-01-25
  • 2020-09-13
  • 1970-01-01
  • 2012-07-11
相关资源
最近更新 更多