Sat*_*ish 185 awk command-line text-processing
我有一个包含以下行的文件:
/logs/tc0001/tomcat/tomcat7.1/conf/catalina.properties:app.env.server.name = demo.example.com
/logs/tc0001/tomcat/tomcat7.2/conf/catalina.properties:app.env.server.name = quest.example.com
/logs/tc0001/tomcat/tomcat7.5/conf/catalina.properties:app.env.server.name = www.example.com
Run Code Online (Sandbox Code Playgroud)
在上面的输出中,我想提取3个字段(第2,4和最后一个*.example.com
).我得到以下输出:
cat file | awk -F'/' '{print $3 "\t" $5}'
tc0001 tomcat7.1
tc0001 tomcat7.2
tc0001 tomcat7.5
Run Code Online (Sandbox Code Playgroud)
如何提取具有以下域名的最后一个字段'='
?我如何使用multiple delimiter
提取字段?
emb*_*yle 302
分隔符可以是正则表达式.
awk -F'[/=]' '{print $3 "\t" $5 "\t" $8}' file
Run Code Online (Sandbox Code Playgroud)
生产:
tc0001 tomcat7.1 demo.example.com
tc0001 tomcat7.2 quest.example.com
tc0001 tomcat7.5 www.example.com
Run Code Online (Sandbox Code Playgroud)
fed*_*qui 37
好消息!awk
字段分隔符可以是正则表达式.你只需要使用-F"<separator1>|<separator2>|..."
:
awk -F"/|=" '{print $3, $5, $NF}' file
Run Code Online (Sandbox Code Playgroud)
返回:
tc0001 tomcat7.1 demo.example.com
tc0001 tomcat7.2 quest.example.com
tc0001 tomcat7.5 www.example.com
Run Code Online (Sandbox Code Playgroud)
这里:
-F="/|="
将输入字段分隔符设置为/
或=
.然后,它将输出字段分隔符设置为选项卡.
{print $3, $5, $NF}
根据输入字段分隔符打印第3,第5和最后一个字段.
看另一个例子:
$ cat file
hello#how_are_you
i#am_very#well_thank#you
Run Code Online (Sandbox Code Playgroud)
这个文件有两个字段分隔符,#
和_
.如果我们想打印第二个字段而不管分隔符是一个还是另一个,让我们两个都是分隔符!
$ awk -F"#|_" '{print $2}' file
how
am
Run Code Online (Sandbox Code Playgroud)
文件编号如下:
hello#how_are_you i#am_very#well_thank#you
^^^^^ ^^^ ^^^ ^^^ ^ ^^ ^^^^ ^^^^ ^^^^^ ^^^
1 2 3 4 1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)
如果您的空格是一致的,您可以将其用作分隔符,而不是\t
直接插入,您可以设置输出分隔符,它将自动包含:
< file awk -v OFS='\t' -v FS='[/ ]' '{print $3, $5, $NF}'
Run Code Online (Sandbox Code Playgroud)
小智 5
2
对于任何数字5
、字母a
或空格的字段分隔符#
,其中分隔字符必须重复至少 2 次且不超过 6 次,例如:
awk -F'[2-5a# ]{2,6}' ...
Run Code Online (Sandbox Code Playgroud)
我确信使用 ( ) 和参数存在这种变化
小智 5
另一种是使用 -F 选项,但将其传递给正则表达式以打印左右括号之间的文本()
。
文件内容:
528(smbw)
529(smbt)
530(smbn)
10115(smbs)
Run Code Online (Sandbox Code Playgroud)
命令:
awk -F"[()]" '{print $2}' filename
Run Code Online (Sandbox Code Playgroud)
结果:
smbw
smbt
smbn
smbs
Run Code Online (Sandbox Code Playgroud)
使用 awk 只打印之间的文本[]
:
使用awk -F'[][]'
但 awk -F'[[]]'
不会工作。
http://stanlo45.blogspot.com/2020/06/awk-multiple-field-separators.html
归档时间: |
|
查看次数: |
341935 次 |
最近记录: |