【问题标题】:Print field with condition打印有条件的字段
【发布时间】:2016-08-03 09:29:03
【问题描述】:

我有一个 CSV 文件,其中包含如下内容:

"1","32","1","2"
"2","2","22","2"
"3","72","5","2"
"4","36","22","2"

如果第三个字段包含值:22,我只想显示第一个字段。 在我的示例中,我想要:

2
4

我在想这样的事情:

awk -F , -v OFS=, '{if ($3=="22")} {print $1}' myfile.csv

我该怎么做?

【问题讨论】:

    标签: bash csv awk sed


    【解决方案1】:

    如果可以的话,保留引号:

    awk -F, '$3=="\"22\""{print $1}' test.csv
    

    这种情况下的输出:

    "2"
    "4"
    

    要去掉引号,你可以这样做:

    awk -F\" '$6==22{print $2}' test.csv
    

    输出:

    2
    4
    

    在这种情况下,引号被视为分隔符。因此,我们必须调整列的编号。

    当然也可以替换引号:

    awk -F, '$3=="\"22\""{str=$1; gsub("\"","",str); print str}' test.csv
    

    【讨论】:

      【解决方案2】:

      这里有一个更简单的 awk 命令来完成你的工作:

      awk -F '","|"' '$4 == 22{print $2}' file
      
      2
      4
      

      【讨论】:

        【解决方案3】:

        恕我直言,最简单的方法是去掉双引号,然后做任何你想做的事情:

        $ awk -F, '{gsub(/"/,"")} $3==22{print $1}' file
        2
        4
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-17
          • 1970-01-01
          • 1970-01-01
          • 2021-10-29
          • 2013-03-13
          • 2017-02-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多