我已经尝试用谷歌搜索我的问题的答案,我确信答案就在那里,我只是不知道要搜索什么。基本上我想要做的是从文件中取出一行,获取 最后 2 个字段(由“\
”分隔),然后打印这两个字段。
但是,我希望打印出这些字段时中间有 2 个反斜杠。 (我正在使用 Windows 路径)这是我的陈述
$ line = C:\Windows\System32\folder1\folder2\folder3\executable.exe
$ echo $line | awk -F "\\" '{print $(NF-2)$(NF-0)}'
我希望输出返回 folder3\\executable.exe
我对 awk 的经验有限。提前感谢您的帮助
最佳答案
从命令行:
$ echo $line | awk 'BEGIN{FS="\\"; OFS="\\\\"} {print $(NF-1), $NF}'
给你
folder3\\executable.exe
为你的行
FS
为处理的行设置字段分隔符,OFS
设置输出字段分隔符。双 \\
是避免单个 \
的特殊含义所必需的。
请注意,您对 line
的分配应将字符串括在 ""
中,并且 =
前后没有空格。即,
line="C:\Windows\System32\folder1\folder2\folder3\executable.exe"
或者,这个脚本 (so.awk)
BEGIN { FS="\\"
OFS="\\\\"}
{print $(NF-1), $NF}
如果调用为 echo $line | 将给你相同的输出awk -f so.awk data.txt
其中 data.txt
包含您的一个(或可能多个)路径
更新:
如果您想要打印前导双反斜杠:print "", $(NF-1), $NF
将通过在开头添加一个空字符串来达到目的,如@Dennis Williamson 的有用评论
关于awk 在字段之间打印字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312359/