3

伙计们:

向 awk 子命令传递包含最后一个字段中的 + 符号的字符串时,我遇到了问题。我正在尝试输出记录中除了最后一个字段之外的所有字段,而没有尾随字段分隔符。例如:

echo "dog cat fish hamster" | awk 'sub(FS $NF, x)'

这产生了“狗猫鱼”的期望输出

echo "dog cat fish +hamster" | awk 'sub(FS $NF, x)'

这会产生似乎没有输出的东西。

echo "dog +cat fish hamster" | awk 'sub(FS $NF, x)'

这也产生了“狗+猫鱼”的预期输出

我正在使用 awk 解析具有一个或多个源目录和一个目标目录的配置文件,以用于通过 scp 传输文件。一些目标目录有一个+,例如/app/tgv+/in,由于遗留代码,我无法更改挂载点。只有当 + 出现在最后一个字段中时,才会出现问题。如果您能帮助我确定我是否做错了什么,或者这只是 awk 字符串解析器的问题,我将不胜感激。非常感谢您的帮助。

DGC

4

1 回答 1

5

这里的问题是第一个参数sub()应该是一个正则表达式。在大多数匹配绝对字符串的情况下,这不会打扰。但是在您的情况下 ,FS $NF将成为+hamster将被视为正则表达式的,因此不会与任何内容匹配,因此不会打印任何内容。

即使您使用类似{1}hamster代替的东西+hamster,也不会有任何输出。

更好的方法是改变方式。一个简单的方法可以

echo "dog cat fish +hamster" | awk 'NF--'
于 2013-05-29T19:13:41.633 回答