我不太明白角色在.awk脚本中是如何工作的。
我想在这个文件中找到这一行:
#Name Surname City Company State Probability Units Price Amount
如果我写的话:
awk < test.txt '/\#/ {print $1}'
在命令行中,一切正常,输出为#Name。
但是,如果我尝试以下列方式在.awk文件中执行相同的操作:
/\#/ {print $1};
我没有输出。此外,由于某种原因,gEdit不会将“\”识别为.awk中的转义字符。
为什么会发生这种情况,是否有解决方法?
答案 0 :(得分:2)
这对我有用,你也不需要逃避#
,因为它不是具有特殊含义的角色。
(my.awk
)内容:
/#/ {print $1};
然后使用awk解释器执行它:
hwnd@lsh1001:~$ awk -f my.awk test.txt
#Name
答案 1 :(得分:2)
#
不是RE元字符,因此不需要在RE的上下文中对其进行转义以使其按字面意思理解。
我不知道gEdit
是什么(我也不想,所以不需要解释!)所以我无法帮助你解决这个问题 - 也许用{{1发布另一个问题那么知道该工具的人会看一下吗?
在命令行上运行:
gEdit
将产生与:
相同的输出awk '/\#/ {print $1}' test.txt
假设tst.awk包含:
awk -f tst.awk test.txt
同样,您不需要逃避/\#/ {print $1}
,但这不是重点。如果那不是您遇到的情况,那么最可能的原因是您用来创建tst.awk的编辑器以某种方式损坏了文件,可能是通过将控件-Ms添加到行尾。
最后 - 默认情况下,awk语句会被换行符终止,不需要在行尾添加虚假的冒号,如果你不明白的话,你可能会把某个地方放在某个地方你真的不想要它。