awk 在字段之间打印字符

标签 awk

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

但是,我希望打印出这些字段时中间有 2 个反斜杠。 (我正在使用 Windows 路径)这是我的陈述

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

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

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

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

最佳答案

从命令行:

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

给你

folder3\\executable.exe

为你的

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 的有用评论

关于awk 在字段之间打印字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312359/

相关文章:

file - 在文件中搜索字符串并输出行号

bash - 空语句运算符只捕获数字或字母

http - gawk 在没有超时的情况下通过管道读取最后一位二进制数据?

regex - 如何替换与 egrep 匹配的较大字符串中的子字符串?

python - 从 shell 和 python 中的行中删除字符串

csv - 重击 : Add empty column(s) to CSV with unknown positions

awk - 使用 awk 打印排序输出以避免管道排序命令

regex - git 的 awk 字符串

linux - 使用 'tr' 和 'awk' 命令从 Linux 终端中的 txt 文件中删除标点符号

windows - 使用 AWK 或 SED 等命令行工具反转文本文件中的字符串