awk - 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,我也确实得到了一些权限错误。请告诉我我做错了什么?
解决方案
问题是您没有设置分隔符(字段分隔符),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
设置为逗号。
推荐阅读
- visual-studio-code - Visual Studio Code 转到下一个错误或警告,但不转到信息
- json - 快速解析对 JSON 的 API 响应
- reactjs - ReactJS - 禁用引导库依赖
- c++ - 如何在 Windows 上使用 C++ 在现有浏览器窗口中打开 URL
- icecast - IceCast 当前播放不更新,当使用 % 符号时
- angular - 更新后 Angular 8 订阅触发
- java - 不使用框架管理 DI 对象
- vfs - 如何在块设备层考虑 VFS 操作?
- angular - Angular:如何用实时 api 替换硬编码对象?
- c# - 为什么 AES 加密的结果在使用 C# 和使用 OpenSSL C++ 之间存在巨大差异?