【问题标题】:How can I set awk delimiter to either string or character?如何将 awk 分隔符设置为字符串或字符?
【发布时间】:2014-11-25 14:52:16
【问题描述】:

如何在 awk 中使用 string 和另一个 character 作为同时分隔符?

sdlcb@ubuntu:~/AMD_C/SO$ echo "111:222text333:444" | awk -F ':' '{print $2}'
222text333

sdlcb@ubuntu:~/AMD_C/SO$ echo "111:222text333:444" | awk -F "text" '{print $2}'
333:444

那么问题来了,我们怎样才能同时使用“text”和“:”作为分隔符,这样{print $2}就会打印222作为输出呢?考虑上述示例中的输入。

【问题讨论】:

    标签: linux awk delimiter


    【解决方案1】:

    你可以使用简单的交替

    $ echo "111:222text333:444" | awk -F "text|:" '{print $2}'
    222
    

    它的作用

    • -F "text|:" 将字段分隔符设置为 text:

    测试

    为了确保正确划分字段

    $echo "111:222text333:444" | awk -F "text|:" '{print $1,$2,$3,$4}'
    111 222 333 444
    

    编辑

    如果您想使用| 作为分隔符,请将| 转义为

    $ echo "111:222text333:444|hello" | awk -F '\\||text|:' '{print $1,$2,$3,$4,$5}'
    111 222 333 444 hello
    

    【讨论】:

    • 谢谢! 1个疑问,如果我需要'|'怎么办以及另外一个字符作为分隔符?
    • 例如:echo "111|222text333|444" | awk -F "文本|\|" '{print $3}' awk:警告:转义序列\|' treated as plain |'
    • @A.M.D 好问题。转义 | 并确保将整个内容用单引号括起来。我已经编辑了答案。希望它有所帮助:)
    • @A.M.D 永远欢迎你 :) 很高兴听到我能帮上忙。:)
    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多