Awk在字段之间打印字符

Awk在字段之间打印字符,awk,Awk,我试着用谷歌搜索我问题的答案,我确信答案就在那里,我只是不知道该搜索什么。基本上,我要做的是从文件中取出一行,抓取最后两个字段(用“\”分隔),然后打印这两个字段 但是,我希望这些字段在打印出来时中间有两个反斜杠。(我正在使用windows path)这是我的声明 $ line = C:\Windows\System32\folder1\folder2\folder3\executable.exe $ echo $line | awk -F "\\" '{print $(NF-2)$(NF-0

我试着用谷歌搜索我问题的答案,我确信答案就在那里,我只是不知道该搜索什么。基本上,我要做的是从文件中取出一行,抓取最后两个字段(用“
\
”分隔),然后打印这两个字段

但是,我希望这些字段在打印出来时中间有两个反斜杠。(我正在使用windows path)这是我的声明

$ line = C:\Windows\System32\folder1\folder2\folder3\executable.exe

$ echo $line | awk -F "\\" '{print $(NF-2)$(NF-0)}'
我希望输出返回
folder3\\executable.exe


我在awk方面的经验有限。感谢您在advanced中提供的任何帮助

您要设置的变量是OFS,用于输出字段分隔符。

从命令行:

$ echo $line | awk 'BEGIN{FS="\\"; OFS="\\\\"} {print $(NF-1), $NF}'
我会给你

folder3\\executable.exe
对于您的

FS
为处理的行设置字段分隔符,
OFS
为输出字段分隔符。双
\\
是逃避单个
\
的特殊含义所必需的

请注意,您对
行的赋值应将字符串括在
中,
=
前后不带空格。即

line="C:\Windows\System32\folder1\folder2\folder3\executable.exe"
或者,此脚本(so.awk)

如果作为
echo$line | awk-f so.awk data.txt
调用,将提供相同的输出,其中
data.txt
包含一个(或多个)路径

更新:


如果您想打印前导双反斜杠:
print”“,$(NF-1),$NF
将在开头添加一个空字符串,正如@Dennis Williamson在一篇有用的评论中提到的那样,您还可以使用
rev
来反转字符串,在“\”分隔符上拆分字符串,然后获取数组中的前两个字符串。 最后,用前面的分隔符“\”组成字符串,然后再次反转


相反是必要的,因为您不能总是知道根目录和最后一个目录之间的子目录的编号。

someas!!非常感谢。在你补充完整答案之前,我问了最后一个问题。这太棒了。感谢you@JaronBradley:要打印前导双反斜杠:
print”“,$NF,$(NF-1)
@Levon:为什么要删除问题中的前导双反斜杠?@denniswillamson如果需要,这是一个很好的/有用的观点(而且很容易做到)-谢谢(尽管OP只提到打印最后两个字段,它们之间有“\\”,但以防万一:)@DennisWilliamson,因为OP说他们想打印最后两个字段之间带有“\\\”(无法使用双引号:-/”)。。我只是让输出与文本一致(并且接受我答案的OP)颠倒了行的顺序(从上到下)。你的意思是从左到右颠倒。你是对的,谢谢你的更正。我马上编辑它
BEGIN { FS="\\"
        OFS="\\\\"}
{print $(NF-1), $NF}