要在 AWK 中处理的记录具有以下可能的格式:
foobar
是固定长度,serialno
是可变长度,我想捕获的字段可能包含零个或多个下划线。
foobar_823932230_processname.txt
foobar_82393280_process_name.txt
foobar_8239330_foo_process_name.txt
Run Code Online (Sandbox Code Playgroud)
期望输出
processname
process_name
foo_process_name
Run Code Online (Sandbox Code Playgroud)
如果我使用,FS="[_.]"
那么我可以print $3
用于第一条记录,但不适用于第二条和第三条记录。
如何捕获序列号和 .txt 之间的所有内容?
我正在编辑需要更改的旧版 AWK 代码。一旦我正确捕获了这个字段,awk 进程就会继续生成额外的输出。
这cut + cut
也应该有效:
cut -d_ -f3- file | cut -d. -f1
Run Code Online (Sandbox Code Playgroud)
processname
process_name
foo_process_name
Run Code Online (Sandbox Code Playgroud)
一个awk
解决方案是使用这个正则表达式:
awk '{gsub(/^([^_]+_){2}|\..*$/, "")} 1' file
Run Code Online (Sandbox Code Playgroud)