我有一个包含完整路径的文件:
/home/usr/file_name_delimited_by_underscore_123.txt
/home/usr/another_example_456.rar
Run Code Online (Sandbox Code Playgroud)
我想从没有扩展名的路径中打印文件名,并在它旁边打印最后一个_.
输出:
file_name_delimited_by_underscore_123 123
another_example_456 456
Run Code Online (Sandbox Code Playgroud)
我想出了一种使用管道 awk 命令获得所需输出的方法:
cat file | awk -F[/.] '{print $(NF-1)}' | awk -F_ '{print $0" "$NF}'
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有管道的情况下实现这一目标?
我的问题归结为是否可以对 awk 解析的字段执行操作?
谢谢你的帮助。
是的,您可以在字段上执行任何您喜欢的操作。例如:
$ cat file | awk -F[/.] '{n = split($(NF-1),a,/_/); print $(NF-1)" "a[n]}'
file_name_delimited_by_underscore_123 123
another_example_456 456
Run Code Online (Sandbox Code Playgroud)
当然,cat这里不需要;您可以awk直接读取文件 - 由于默认输出字段分隔符OFS是一个空格,将结果写为单独的输出字段而不是字符串连接会更惯用:
awk -F[/.] '{n = split($(NF-1),a,/_/); print $(NF-1), a[n]}' file
Run Code Online (Sandbox Code Playgroud)
使用任何 sed:
$ sed 's:.*/\(.*_\(.*\)\)\..*:\1 \2:' file
file_name_delimited_by_underscore_123 123
another_example_456 456
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |