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}