【问题标题】:Print a column in awk if it matches, if not then still print the line (without that column)如果匹配,则在 awk 中打印一列,如果不匹配,则仍打印该行(没有该列)
【发布时间】:2015-10-06 19:47:55
【问题描述】:

我正在尝试使用 awk 进行一些过滤,但我目前遇到了问题。我可以让 awk 匹配一个正则表达式并打印带有列的行,但我不能让它打印没有列的行。

awk -v OFS='\t' '$6 ~ /^07/ {print $3, $4, $5, $6}' file

目前是我所拥有的。如果它与正则表达式不匹配,我可以让 awk 打印没有第六列的行吗?

【问题讨论】:

    标签: bash shell awk


    【解决方案1】:

    如果正则表达式不匹配,请将$6 设置为空字符串。就如此容易。应该这样做:

    awk -v OFS='\t' '{ if ($6 ~ /^07/) { print $3, $4, $5, $6 } else { $6 = ""; print $0; } }' file
    

    请注意,$0 是整行,包括$2(您似乎没有使用)。它将打印除第 6 列之外的每一列。

    如果您只想在不匹配的情况下打印$3$4$5,请改用:

    awk -v OFS='\t' '{ if ($6 ~ /^07/) print $3, $4, $5, $6; else print $3, $4, $5 }' file
    

    【讨论】:

    • 不知道为什么我没有想到使用 if 语句。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2021-06-26
    • 2017-04-30
    • 1970-01-01
    • 2019-11-11
    • 2015-04-25
    相关资源
    最近更新 更多