当前位置: 首页 > 知识库问答 >
问题:

在awk中使用多个分隔符

邵兴庆
2023-03-14

我有一个包含以下行的文件

/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

在上面的输出中,我想提取3个字段(数字2,4和最后一个*.example.com)。我得到以下输出:

cat file | awk -F'/' '{print $3 "\t" $5}'
tc0001   tomcat7.1
tc0001   tomcat7.2
tc0001   tomcat7.5

如何提取域名位于'='之后的最后一个字段?如何使用多分隔符提取字段?

共有3个答案

丰景同
2023-03-14

另一种方法是使用-F选项,但将其传递给regex以打印左括号和/或右括号之间的文本)。

文件内容:

528(smbw)
529(smbt)
530(smbn)
10115(smbs)

命令:

awk -F"[()]" '{print $2}' filename

结果:

smbw
smbt
smbn
smbs

使用awk仅打印[]之间的文本:

使用awk-F'[]]'但是awk-F'[]]'将不起作用。

http://stanlo45.blogspot.com/2020/06/awk-multiple-field-separators.html

柳胜
2023-03-14

好消息awk字段分隔符可以是正则表达式。你只需要使用-F“

awk -F"/|=" -vOFS='\t' '{print $3, $5, $NF}' file

返回:

tc0001  tomcat7.1  demo.example.com
tc0001  tomcat7.2  quest.example.com
tc0001  tomcat7.5  www.example.com

在这里:

>

  • -F”/“将输入字段分隔符设置为/=

    -vOFS='\t'正在使用-v标志来设置变量。OFS是输出字段分隔符的默认变量,它被设置为制表符。该标志是必要的,因为没有内置的OFS,如-F

    {print$3,$5,$NF}根据输入字段分隔符打印第三、第五和最后一个字段。

    参见另一个例子:

    $ cat file
    hello#how_are_you
    i#am_very#well_thank#you
    

    这个文件有两个字段分隔符,#_。如果我们想打印第二个字段,不管分隔符是哪一个,让我们都成为分隔符!

    $ awk -F"#|_" '{print $2}' file
    how
    am
    

    其中文件编号如下:

    hello#how_are_you           i#am_very#well_thank#you
    ^^^^^ ^^^ ^^^ ^^^           ^ ^^ ^^^^ ^^^^ ^^^^^ ^^^
      1    2   3   4            1  2   3    4    5    6
    

  • 壤驷向明
    2023-03-14

    分隔符可以是正则表达式

    awk -F'[/=]' '{print $3 "\t" $5 "\t" $8}' file
    

    产生:

    tc0001   tomcat7.1    demo.example.com  
    tc0001   tomcat7.2    quest.example.com  
    tc0001   tomcat7.5    www.example.com
    
     类似资料:
    • 问题内容: 我在网上找到了一些答案,但是我没有使用正则表达式的经验,我相信这里是需要的。 我有一个字符串,需要用分隔 或也就是说,它必须是分号或逗号后跟一个空格。没有尾随空格的单个逗号应保持不变 示例字符串: 应该拆分为包含以下内容的列表: 问题答案: 幸运的是,Python内置了:) 更新: 在你的评论之后:

    • 本文向大家介绍awk RS-记录分隔符,包括了awk RS-记录分隔符的使用技巧和注意事项,需要的朋友参考一下 示例 由awk用于将输入拆分为多个记录。例如: 产生: 默认情况下,记录分隔符是换行符。 同样:echo“ abc | de f” | awk'BEGIN {RS =“ |”} {print $2}' 产生:            

    • 问题内容: 如何在JavaScript中使用多个分隔符拆分字符串?我正在尝试在逗号和空格上进行拆分,但是AFAIK,JS的拆分功能仅支持一个分隔符。 问题答案: 传递正则表达式作为参数: 编辑添加: 您可以通过选择数组的长度减去1来获得最后一个元素: …,如果模式不匹配:

    • 问题内容: 似乎pandas read_csv 函数仅允许使用单个字符定界符/分隔符。有没有办法允许使用字符串“ * | *”或“ %%”代替? 问题答案: 解决方案是使用read_table而不是read_csv: 因此,我们可以阅读以下内容:

    • 本文向大家介绍awk ORS-输出记录分隔符,包括了awk ORS-输出记录分隔符的使用技巧和注意事项,需要的朋友参考一下 示例 由awk用于分隔记录,并在每个print语句的末尾输出。例如: 产生: 默认值为\n(换行符)。

    • 本文向大家介绍awk OFS-输出字段分隔符,包括了awk OFS-输出字段分隔符的使用技巧和注意事项,需要的朋友参考一下 示例 由awk用来分隔print语句输出的字段。例如: 产生: 默认值为,由单个空格组成的字符串。