awk混合尾随和领先下划线

时间:2013-12-03 15:02:40

标签: awk

要在第三个字段上保留数字小于100(百)的行,如何使用awk脚本处理尾随和引导下划线。

以下是示例输入:

asd 5.0 _84_ 34
sds 3.8 _340_ 56
sds 3.8  99  56
sds 3.8 _340_ 56          
ddd 288 _26_ 45
sdf 321 _374_ 53 
tyu 321 _39_ 89 
sds 3.8 120  56 
wer 3.8 _28_ 345
sds 3.8  45  56
tre 230 _265_ 90  
rtu 389 _372_ 45
bnm 965 _270_ 745
fgh 856 _44_ 346
sds 3.8 107  56

预期输出将是:

 asd 5.0 _84_ 34
 sds 3.8  99  56            
 ddd 288 _26_ 45
 tyu 321 _39_ 89 
 wer 3.8 _28_ 345
 sds 3.8  45  56       
 fgh 856 _44_ 346

4 个答案:

答案 0 :(得分:1)

awk '$3 ~ /^_?[[:digit:]]{1,2}_?$/'

这将匹配可选的下划线,一个或两个数字后跟一个可选的下划线。

答案 1 :(得分:0)

尝试这个awk one-liner:

kent$  awk -F'_| +' 'NF==4&&$3<100||NF>=6&&$4<100' file
asd 5.0 _84_ 34
sds 3.8  99  56
ddd 288 _26_ 45
tyu 321 _39_ 89
wer 3.8 _28_ 345
sds 3.8  45  56
fgh 856 _44_ 346

答案 2 :(得分:0)

使用gawk:

 awk 'match($3, /([0-9]+)/, a) {if (a[1]<100) print $0}' input

答案 3 :(得分:0)

$ awk '{line=$0; gsub(/_/,"")} $3 < 100{print line}' file
asd 5.0 _84_ 34
sds 3.8  99  56
ddd 288 _26_ 45
tyu 321 _39_ 89 
wer 3.8 _28_ 345
sds 3.8  45  56
fgh 856 _44_ 346