首页 > 解决方案 > awk 不打印输出到辅助文件,语法错误?

问题描述

更多关于我的广播日志......到目前为止,我完成的工作很棒,推送通知非常完美,事实上太好了。我被每一个意外的连接轰炸。我想过滤日志以仅在麦克风按键时间超过 1.5 秒(第 4 个字段)时发送通知,将通知减少为仅实际通信。我正在尝试将原始的“completelog.txt”文件过滤到“filteredlog.txt”文件中。原来的样子是这样的:

W7MIT,TG 91,4601149,0.5,0,0.00
W7MIT,TG 91,4601149,0.8,0,0.00
VA3GJB,TG 91,4601149,1.2,0,0.00
G0IOR,TG 91,2345614,11.6,0,0.00
G0IOR,TG 91,2345614,10.6,0,0.00
G4NHP,TG 91,2345614,6.2,2,0.00
GM0TKC,TG 91,2345614,0.5,0,0.00
EA8CTB,TG 91,2345614,2.3,0,0.00
EA8CTB,TG 91,2345614,1.6,0,0.00
GM1RCP,TG 91,2345614,0.5,12,0.00

我尝试使用的代码在这里:

#!/bin/bash
awk -v x=1.5 '$4 >= x' completelog.txt >> filteredlog.txt

然后我尝试不附加(我认为)

#!/bin/bash
awk -v x=1.5 '$4 >= x' completelog.txt > filteredlog.txt

由于两者都不起作用,我添加了 sudo (不认为这是必要的)

#!/bin/bash
sudo awk -v x=1.5 '$4 >= x' completelog.txt >> filteredlog.txt

并且再次不附加(仍然认为这就是那个意思)。

#!/bin/bash
sudo awk -v x=1.5 '$4 >= x' completelog.txt > filteredlog.txt

然后我开始猜测随机的事情。

awk -v x=1.5 '$4 >= x'  completelog.txt

然后再次...

awk '$4>=1.5{print}' completelog.txt

一切都无济于事。即使文件被 chmoded 甚至尝试使用 sudo,我也确实得到了一些权限错误。请告诉我我做错了什么?

标签: awkscriptingcommand-line-interface

解决方案


问题是您没有设置分隔符(字段分隔符),awk因此默认情况下需要空格分隔符。反而:

awk -F"," -v x=1.5 '$4 >= x' completelog.txt >> filteredlog.txt

您还可以通过设置内置变量在脚本本身的BEGIN块中指定它:awkFS

awk -v x=1.5 'BEGIN{OFS=FS=","}$4>=x' completelog.txt >> filteredlog.txt

这会将字段分隔符FS和输出字段分隔符OFS设置为逗号。


推荐阅读