awk -F"/" '{print $(NF-2)"/"$(NF-1)"/"$NF,$0}'中的$(NF-2)几个参数分别是什么作用
时间: 2023-11-21 21:06:28 浏览: 78
在 awk 命令中,`-F` 参数用于指定字段分隔符。在这个例子中,`-F"/"` 表示将输入的每一行按照斜杠 `/` 进行分割成不同的字段。
`$NF` 是 awk 内置的变量,表示当前行的最后一个字段。而 `NF` 则表示当前行的字段数量。
在这段代码中,`$(NF-2)` 的作用是获取当前行倒数第三个字段的值。也就是说,假设当前行的数据是 `/path/to/file.wav`,那么 `$(NF-2)` 就是获取到 `to` 这个字段的值。
类似地,`$(NF-1)` 表示获取当前行倒数第二个字段的值,而 `$NF` 表示获取当前行最后一个字段的值。
所以,这段代码的目的是将输入的每一行按照斜杠进行分割,并输出最后三个字段的值,并用斜杠重新拼接起来,然后再加上原始的完整行数据。以此来实现在文件路径中提取目录信息的功能。
相关问题
pwd | awk -F/ '{print $NF-1}' 这个命令为什么输出-1
这个命令的作用是获取当前工作目录,并通过管道将其传递给 awk 命令进行处理。在 awk 命令中,-F/ 指定了分隔符为斜杠 (/),然后通过打印 $NF-1,输出路径中倒数第二个斜杠后的内容。
然而,输出结果为 -1 是因为在这个命令中使用了数学运算符,awk 尝试将字符串转换为数字进行计算。由于 $NF 是字符串类型,它表示最后一个字段,而不是一个数字。当尝试将字符串类型的字段减去 1 时,awk 会将其转换为数字类型,但字符串无法转换为有效的数字,因此结果为 -1。
如果你想要输出倒数第二个斜杠后的内容,可以简化命令为:
```bash
basename "$(dirname "$(pwd)")"
```
这个命令使用了 dirname 和 basename 命令来获取当前工作目录的上级目录,并输出上级目录的名称。这样就可以避免 awk 命令中的数值计算问题。
$(ls -lt ${pwd}/ | awk '/^-/ {print $NF}') 是什么意思?awk后面去掉是什么意思
这是一个 Linux 命令,它的作用是列出当前目录下所有的文件和子目录,并按照最后修改时间的先后顺序进行排序。具体解释如下:
- `ls` 是列出目录内容的命令。
- `-lt` 是 `ls` 命令的两个选项,表示按照修改时间的先后顺序进行排序,并以长格式输出文件信息。
- `${pwd}/` 表示当前目录。
- `|` 是管道符,用于将 `ls` 命令的输出传递给下一个命令。
- `awk` 是一个文本处理工具,用于对文本进行格式化处理。
- `'/^-/ {print $NF}'` 是 `awk` 命令的一个模式,表示只选择以 `-` 开头的行,然后输出该行的最后一个字段,即文件名。
如果去掉 `awk` 命令,则只会输出当前目录下的所有文件和子目录,不会进行排序。