我已经尝试使用谷歌搜索我的问题的答案,我确定答案就在那里,我只是不知道该搜索什么。基本上我要做的是从文件中取一行来抓取最后2个字段(由“\
”分隔),然后打印这两个字段。
但是,我希望这些字段打印出,并在beween中添加2个反斜杠。 (我正在使用Windows路径)这是我的陈述
$ line = C:\Windows\System32\folder1\folder2\folder3\executable.exe
$ echo $line | awk -F "\\" '{print $(NF-2)$(NF-0)}'
我希望输出返回folder3\\executable.exe
我对awk的体验有限。感谢您提前获取任何帮助
答案 0 :(得分:1)
从命令行:
$ echo $line | awk 'BEGIN{FS="\\"; OFS="\\\\"} {print $(NF-1), $NF}'
会给你
folder3\\executable.exe
代表line
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的有用评论所述
答案 1 :(得分:0)
您要设置的变量是OFS,用于输出字段分隔符。
答案 2 :(得分:0)
您还可以使用rev
反转字符串,将字符串拆分为“\”分隔符,然后取出数组中的前两个字符串。
最后,使用前一个分隔符“\”组合字符串并再次反向。
反过来是必要的,因为你不能总是知道根目录和最后一个目录之间的子目录数量。