Unix 替代命令问题

Unix 替代命令问题,unix,shell,Unix,Shell,我试图打开一个日志文件,并在需要时处理行。比如说 2010-01-31 00:05:59400-0500 |[VHX4077ff8Ze1sTnE-op51V]| [TB-bce11b:-16a2-5ed9f542]|[6C7CA345F63F835CB353FF15BD6C5E052EXX8E7A | 1000107@Superfly| 31933782 | 172.9.8.3 |设备|已创建ID | 我需要编辑第5列并删除Superfly之前的所有内容。基本上删除任何数字和“@”符号。此文件将

我试图打开一个日志文件,并在需要时处理行。比如说

2010-01-31 00:05:59400-0500 |[VHX4077ff8Ze1sTnE-op51V]| [TB-bce11b:-16a2-5ed9f542]|[6C7CA345F63F835CB353FF15BD6C5E052EXX8E7A | 1000107@Superfly| 31933782 | 172.9.8.3 |设备|已创建ID |

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

我的剧本:

awk -F "|" {' sub(".*@","",$5) print $5 '} test.log
awk:cmd。行:3:打印$5
awk:cmd。第3行:^语法错误


第一条语句后缺少分号。

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

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

谢谢MechS,在尝试了您的命令后,我仍然收到一个错误:awk:sub(“.@”,”,$5);打印$5 awk:^语法错误awk-F“|”{“sub”(.@),”,$5);使用示例数据从我的linux命令行打印$5'}test.log产生“SuperFly”,awk解释器可能需要;在上一条语句之后,awk-F“|”{sub(“.@”,”,$5);print$5;}test.log我没有这样做。仅供参考,我通常发现使用-F参数和编辑文件更容易。它的可读性更高,很多编辑器可能已经注意到了错误的语法。对不起,我不明白我的设置发生了什么。我正在运行SUSELinux10。有没有其他方法可以通过脚本来实现这一点?我需要每天在多个大文件上运行它,并更改此列。现在脚本:awk-F“|”{sub(.*@),”,$5);print$5;'}test.log相同错误:awk:sub(.*@),“,$5);印刷5美元;awk:^语法错误我也在CentOS 5系统上尝试了相同的脚本和数据。我得到了同样的错误。
awk -F"|" '$5~/@/{ sub(".*@","",$5) }{print}' OFS="|" file