行中的Bash Grep数值常数

时间:2015-02-04 11:08:19

标签: linux awk grep

我有一个tsv文件,在第22列中我想要将所有没有100.0%的行作为数字常量。所有其他值都是0.0%

我试过了:

cat Product_Adaption.tsv | awk '$22 != /100.0%/' | cut -f1,22 | awk -F '\t' '{print $0, "Missing "}' | head

它仍会打印所有100.0%的值而不是0.0%的值

如何仅获取第22列中具有0.0%

的行的grep
Column 1    Column 22 
26483335    0.00%
26483335    0.00%
6522321 100.00%
10058064    100.00%
26483335    0.00%
1061749 100.00%
26483335    100.00%
1098801 0.00%
83895846    0.00%
10058124    100.00%
26483335    0.00%
90872300    100.00%
9646863 100.00%
26483335    100.00%
26483335    0.00%
26483335    100.00%

当我使用

cat Product_Adaption.tsv |awk '$22 != /^100\.0%$/'| cut -f1,22 | awk -F '\t' '{print $0, "Missing"}' | head

我将此作为输出

26483335        0.0% Missing
26483335        0.0% Missing
6522321 100.0% Missing
10058064        100.0% Missing
26483335        0.0% Missing
1061749 100.0% Missing
26483335        100.0% Missing
1098801 0.0% Missing
83895846        0.0% Missing

正则表达式似乎不起作用?

3 个答案:

答案 0 :(得分:2)

  

如何只获取第22列中包含0.0%?

的行的grep
awk '$22 ~ /^0\.0%$/' file

OR

awk '$22 == "0.0%"' file

OR

awk '$22 !~ /^100\.0%$/' file

我认为你的正则表达式不会起作用,因为你使用了比较运算符。使用正则表达式时,请勿使用==!=进行比较。

$ cat yi
0.0% bar
100.0% foo
$ awk '$1 ~ /^0\.0%$/' yi
0.0% bar
$ awk '$1 == "0.0%"' yi
0.0% bar
$ awk '$1 == /^0\.0%$/' yi
$ 
$ awk '$1 !~ /^100\.0%$/' yi
0.0% bar

答案 1 :(得分:0)

Column 1    Column 22 
26483335    0.00%
26483335    0.00%
6522321 100.00%
10058064    100.00%
26483335    0.00%
1061749 100.00%
26483335    100.00%
1098801 0.00%
83895846    0.00%
10058124    100.00%
26483335    0.00%
90872300    100.00%
9646863 100.00%
26483335    100.00%
26483335    0.00%
26483335    100.00%

当我使用

cat Product_Adaption.tsv |awk '$22 != /^100\.0%$/'| cut -f1,22 | awk -F '\t' '{print $0, "Missing"}' | head

我将此作为输出

26483335        0.0% Missing
26483335        0.0% Missing
6522321 100.0% Missing
10058064        100.0% Missing
26483335        0.0% Missing
1061749 100.0% Missing
26483335        100.0% Missing
1098801 0.0% Missing
83895846        0.0% Missing

正则表达式似乎不起作用?

答案 2 :(得分:0)

目前尚不清楚为什么你有这么多的命令和管道,并且正在将字符串操作与正则表达式分隔符等混合在一起。看起来你只需要它:

awk -F'\t' '$22 == "0.00%"{print $1, $22, "Missing"}' Product_Adaption.tsv

有时你会在你的问题中显示0.00%和其他你显示0.0%的人如此idk你输入文件真正包含的内容,但只使用上述脚本中的正确内容。