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-07 18:10:35 浏览: 48
可以使用awk命令的split函数将字符串按照"/"分割成数组,然后输出倒数第二个元素的内容。具体命令如下:
```bash
echo "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" | awk '{split($0, arr, "/"); print arr[length(arr)-1]}'
```
输出结果为:
```
s_preject_ref_buf_wdata_reg_31_
```
其中,split函数将第一个参数$0表示的字符串按照"/"分割成数组arr,然后通过length函数获取数组长度,再输出倒数第二个元素的内容。
相关问题
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,倒数第二个/前的所有内容
可以使用 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 函数输出结果。