我有一个文件包含" 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
答案 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/'
编辑:添加单词边界。