我正在尝试提取以制表符分隔的数据子集。我想在列中使用一些信息。例如,column2有三个分数由“;”
分隔col1 col2
1 a=2;b=1.1;c=0
1 a=0.2;b=0.2;c=0.5
1 a=1.5;b=1.9;c=3.5
我想提取b值大于1的行。在这种情况下,我想要的输出将是
col1 col2
1 a=2;b=1.1;c=0
1 a=1.5;b=1.9;c=3.5
我尝试使用awk但是在列中提取信息不起作用。此外,订单并不总是相同(a,b,c等)。最好包括'b>搜索条件中的1'。有什么建议吗?
答案 0 :(得分:4)
由于Column2的顺序可以是随机的,您可以执行以下操作:
awk -F'\t' '
NR>1 {
split($2,ary,/[;=]/);
for (i=1;i<=length(ary);i++) {
if (ary[i]=="b" && ary[i+1]>1) {
print $0
}
}
next
}1' file
$ cat f
col1 col2
1 a=2;b=1.1;c=0
1 a=0.2;b=0.2;c=0.5
1 a=1.5;b=1.9;c=3.5
$ awk -F'\t' '
NR>1 {
split($2,ary,/[;=]/);
for (i=1;i<=length(ary);i++) {
if (ary[i]=="b" && ary[i+1]>1) {
print $0
}
}
next
}1' f
col1 col2
1 a=2;b=1.1;c=0
1 a=1.5;b=1.9;c=3.5
答案 1 :(得分:2)
sed -r '/b=0.[0-9]?|b=1.0|b=1([^0-9.]|$)/d' file