3

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

但是,我希望这些字段在它们之间用 2 个反斜杠打印出来。(我正在使用 Windows 路径)这是我的声明

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

$ echo $line | awk -F "\\" '{print $(NF-2)$(NF-0)}'

我希望输出返回folder3\\executable.exe

我对 awk 的经验是有限的。提前感谢您的任何帮助

4

3 回答 3

2

从命令行:

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

会给你

folder3\\executable.exe

为您line

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

请注意,您的分配line应该将字符串""包含在=. IE,

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.txtwheredata.txt包含您的一个(或可能更多)路径,将为您提供相同的输出

更新

如果您想打印前导双反斜杠:print "", $(NF-1), $NF将通过在开头添加一个空字符串来解决问题,正如@Dennis Williamson 的有用评论中所述

于 2012-07-03T13:54:58.573 回答
0

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

于 2012-07-03T13:51:45.760 回答
0

您还可以使用rev反转字符串,在“\”分隔符上拆分字符串,然后获取数组中的前两个字符串。最后,用前一个分隔符'\'组合字符串并再次反转。

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

于 2012-07-03T14:03:57.227 回答