Awk替代命令问题

时间:2010-02-09 16:52:08

标签: unix shell

我正在尝试打开日志文件并根据需要操作行。例如

  

2010-01-31 00:05:59,400 -0500 | [VHX4077ff8Ze1sTnE-op51V] |   [TB-bce11b:-16a2-5ed9f542] | [6C7CA345F63F835CB353FF15BD6C5E052EXX8E7A   | 1000107 @ Superfly | 31933782 | 172.9.8.3 | DEVICE_ID_CREATED]

我需要编辑第5列并删除 Superfly 之前的所有内容。基本上删除那里的任何数字和'@'符号。此文件将包含第5列没有数字@条目的条目,并且不需要编辑该行。数字可以是@之前的任意位数。我曾尝试使用awk的替代命令,但我无法让它工作。

我的剧本:

awk -F "|" {' sub(".*@","",$5) print $5 '} test.log
  

awk:cmd。 line:3:打印5美元   awk:cmd。 line:3:^语法错误

2 个答案:

答案 0 :(得分:4)

awk -F "|" {' sub(".*@","",$5); print $5 '} test.log

第一个声明后缺少分号。

答案 1 :(得分:1)

您是在编辑整个文件并用第5列的值替换每一行吗?如果没有,

awk -F"|" '$5~/@/{ sub(".*@","",$5) }{print}' OFS="|" file