根据子字段值删除复合字段

时间:2015-12-07 19:35:13

标签: bash awk sed

我有一个文件包含" A * B"的复合字段,其中" A"和" B"是数值。我需要一个简单的解决方案(比如使用awk或sed的单行命令)来删除" B"高于特定值。例如,在我有的文件中

4*1 13*5 19*3 26*7 31*1 52*4 60*6 80*2

我希望用" B"删除字段等于或大于5,以便输出

4*1 19*3 31*1 52*4 80*2

3 个答案:

答案 0 :(得分:3)

怎么样:

awk -F'*' '$2<5' RS=' ' ORS=' ' file

答案 1 :(得分:0)

在awk中你可以试试这个:

awk -F" " '{s="";
            for(i=1; i <= NF; i++){
                split($i, a, "*");
                if(a[2] < 5){s = s $i (i == NF ? "\n" : " ")}
            }
           print s;
           }' inputFile

给定示例的输出:

4*1 19*3 31*1 52*4 80*2

答案 2 :(得分:0)

要求救援!

$ echo "4*1 13*5 19*3 26*7 31*1 52*4 60*6 80*2" 
| awk '{for(i=1;i<=NF;i++) 
           if($i~/[0-9]+\*[1-4]\y/) 
              printf "%s ", $i; 
        print ""}'

4*1 19*3 31*1 52*4 80*2

更新: 使用@ anubhava的RS技巧,要短得多。

$ awk 'BEGIN{RS=ORS=" "} /[0-9]+\*[1-4]\y/'

编辑:添加单词边界。