linux, 用awk 打印 u_linlon_v5/c0_u_core/u_logic/gen_me_u_me/gen_rme_0__u_rme/u_data/s_preject_ref_buf_wdata_reg_31_/D,倒数第二个/前的所有内容
时间: 2023-10-14 19:04:51 浏览: 42
可以使用 awk 的 split 函数和数组操作来实现:
```
awk -F'/' '{split($NF,a,"_"); for(i=1;i<=NF-2;i++) printf("%s/", $i); print a[1]}' u_linlon_v5/c0_u_core/u_logic/gen_me_u_me/gen_rme_0__u_rme/u_data/s_preject_ref_buf_wdata_reg_31_/D
```
输出:
```
u_linlon_v5/c0_u_core/u_logic/gen_me_u_me/gen_rme_0__u_rme/u_data/
```
解释:
- `-F'/'` 指定分隔符为 `/`。
- `split($NF,a,"_")` 将最后一个字段以 `_` 分隔,存储到数组 a 中。
- `for(i=1;i<=NF-2;i++) printf("%s/", $i)` 循环输出前面所有的字段,最后一个不输出,用 `/` 分隔。
- `print a[1]` 输出数组 a 的第一个元素。
相关问题
awk 将hdfs://ns2/data/music/mgba2/hive/music_mgba2_migu/recsys/user_subscribe变为hdfs://ns2/data/music/mgba2/hive/music_mgba2_migu/recsys/user_subscribe%
您可以使用 awk 的子字符串替换功能来解决这个问题。下面是示例代码:
```
echo "hdfs://ns2/data/music/mgba2/hive/music_mgba2_migu/recsys/user_subscribe" | awk '{sub(/user_subscribe/, "user_subscribe%"); print}'
```
输出结果为:hdfs://ns2/data/music/mgba2/hive/music_mgba2_migu/recsys/user_subscribe%
这里使用了 awk 的 sub 函数,它将字符串中匹配到的第一个子字符串替换为指定的字符串。在这里,我们用 % 替换了 user_subscribe。最后通过 print 函数输出结果。
disk_size=$(df / | awk '/\//{print $4}')
这是一个 Linux shell 脚本命令,用于获取系统根目录所在分区的可用磁盘空间大小(单位为 KB)。具体来说,该命令将 `df /` 命令的输出通过管道传递给 `awk` 命令进行处理,其中 `/\/` 表示在匹配 / (根目录)时执行后续操作,`print $4` 表示打印第 4 列,即可用空间大小。最终结果赋值给 `disk_size` 变量。
需要注意的是,该命令需要在 Linux 环境下运行,且需要在具有管理员权限的用户下运行,否则可能会提示权限不足或无法识别命令等错误。此外,该命令获取的可用磁盘空间大小单位为 KB,如需转换为其他单位需要进行额外的处理。