我的广播日志有更多...到目前为止,我已经完成的工作很棒,推送通知的执行效果非常好,实际上太好了。每次意外的连接都使我受到轰炸。我想过滤日志,以便仅在麦克风的按键时间超过1.5秒(第四个字段)时才发送通知,从而将通知缩减为仅进行实际通信。我正在尝试将原始的“ 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
全部无济于事。即使文件经过了chmod修改,甚至使用sudo进行了尝试,我也没有遇到任何权限错误。请告诉我我在做什么错了吗?
答案 0 :(得分:2)
问题是您没有在awk
中设置定界符(字段分隔符),因此默认情况下期望空白定界。相反:
awk -F"," -v x=1.5 '$4 >= x' completelog.txt >> filteredlog.txt
您还可以通过设置BEGIN
内置变量,在awk
脚本本身的FS
块中进行指定:
awk -v x=1.5 'BEGIN{OFS=FS=","}$4>=x' completelog.txt >> filteredlog.txt
将字段分隔符FS
和输出字段分隔符OFS
设置为逗号。
答案 1 :(得分:2)
(不是答案,扩展注释)
sudo [command ...] > file
重定向有点令人误解:您使用sudo privs运行命令,但是文件重定向是通过您的 privs完成的。这是因为shell在处理实际命令之前先在 中处理了重定向。
两种解决方法:
将tee
与sudo
特权一起使用:
some command with args | sudo tee -a privileged_file
这会像您一样运行命令,但会以sudo的形式附加到文件中。
使用sudo
特权将所有内容包装在shell中:
sudo sh -c 'some command with args >> privileged_file'
答案 2 :(得分:0)
发布后发现权限错误,但是逗号分隔符也是一个不错的选择,谢谢你们。
pi-star@pi-star(rw):~$ awk -F"," '$4>=1.6{print}' completelog.txt >
filteredlog.txt
-bash: filteredlog.txt: Permission denied
pi-star@pi-star(rw):~$ touch filteredlog.txt
touch: cannot touch ‘filteredlog.txt’: Permission denied
pi-star@pi-star(rw):~$ ls -l filteredlog.txt
-rwxr-xr-x 1 root root 0 Jun 10 08:09 filteredlog.txt
pi-star@pi-star(rw):~$ sudo chmod 777 filteredlog.txt
pi-star@pi-star(rw):~$ ls -l filteredlog.txt
-rwxrwxrwx 1 root root 0 Jun 10 08:09 filteredlog.txt
pi-star@pi-star(rw):~$ awk -F"," '$4>=1.6{print}' completelog.txt >
filteredlog.txt
pi-star@pi-star(rw):~$ tail -f -n2 filteredlog.txt
PD2RAL,TG 91,2042416,6.7,1,0.00
N1AJW,TG 91,2042416,2.2,2,6.70