【问题标题】:awk: if condition is met, add string to these linesawk:如果满足条件,则将字符串添加到这些行
【发布时间】:2017-08-22 14:32:45
【问题描述】:

我正在尝试结合这两个命令:

awk -F[' '] '{if ($1=="string" || $4=="string") print $0" ""blue"}' file >file.out 
awk -F[' '] '{if ($1!="string" && $4!="string") print $0}' file >>file.out

基本上我想添加一列,但如果第一列或第四列等于string,则仅在该列中打印blue

输入:

string 123 452 abc
def 420 902 ghi 

预期输出:

string 123 452 abc blue
def 420 902 ghi 

【问题讨论】:

    标签: bash awk


    【解决方案1】:

    你可以像这样一次性完成

     awk '$1 == "string" || $4 == "string" {print $0 " blue"; next} {print}' file > file.out
    

    它将测试第一个或第四个字段是否为string,如果是则打印blue 后跟的行。我们使用next 然后不处理下一个块(而不是进行我们刚刚做的否定测试)。任何我们没有在blue 上打印的行,我们都按原样打印。

    【讨论】:

      【解决方案2】:

      另一个awk解决方案:

      $ awk '$1=="string" || $4=="string"{ NF+=1; $NF="blue" }1' file
      string 123 452 abc blue
      def 420 902 ghi
      

      【讨论】:

        【解决方案3】:
         awk '{print $0 (($1 == "string" || $4 == "string") ? OFS "blue":"")}' infile
        

        【讨论】:

          【解决方案4】:

          另一个类似的选择:

          awk '$1=="string" || $4=="string" {$0=$0" blue"} 1' infile
          

          输出:

          string 123 452 abc blue
          def 420 902 ghi
          

          【讨论】:

            【解决方案5】:

            以下内容也可能对您有所帮助,我没有提及检查条件中的字段编号(考虑到您的 Input_file 与所示示例相同),因此它会查看一行是否从字符串“string”开始并从字符串“string”结束" 然后它打印蓝色否则打印正常线。

            awk '/^string/||/string$/{print $0,"blue";next} 1'  Input_file
            

            【讨论】:

              猜你喜欢
              • 2021-10-15
              • 1970-01-01
              • 2019-02-09
              • 1970-01-01
              • 2016-11-06
              • 1970-01-01
              • 1970-01-01
              • 2015-07-09
              • 1970-01-01
              相关资源
              最近更新 更多