awk在字段之间打印字符

时间:2012-07-03 13:47:35

标签: awk

我已经尝试使用谷歌搜索我的问题的答案,我确定答案就在那里,我只是不知道该搜索什么。基本上我要做的是从文件中取一行来抓取最后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的体验有限。感谢您提前获取任何帮助

3 个答案:

答案 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反转字符串,将字符串拆分为“\”分隔符,然后取出数组中的前两个字符串。 最后,使用前一个分隔符“\”组合字符串并再次反向。

反过来是必要的,因为你不能总是知道根目录和最后一个目录之间的子目录数量。