Bash Grep 行中的数值常量

Bash Grep Numerical Constant in Row

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

我试过了:

cat Product_Adaption.tsv | awk ' != /100.0%/' | cut -f1,22 | awk -F '\t' '{print [=11=], "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 ' != /^100\.0%$/'| cut -f1,22 | awk -F '\t' '{print [=13=], "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

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

How to get grep only the rows in column 22 that have 0.0% ?

awk ' ~ /^0\.0%$/' file

awk ' == "0.0%"' file

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

我认为您的正则表达式将无法工作,因为您使用了比较运算符。使用正则表达式时,不要使用 ==!= 进行比较。

$ cat yi
0.0% bar
100.0% foo
$ awk ' ~ /^0\.0%$/' yi
0.0% bar
$ awk ' == "0.0%"' yi
0.0% bar
$ awk ' == /^0\.0%$/' yi
$ 
$ awk ' !~ /^100\.0%$/' yi
0.0% bar
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 ' != /^100\.0%$/'| cut -f1,22 | awk -F '\t' '{print [=11=], "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

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

不清楚为什么您有这么多命令和管道,并且将字符串操作与正则表达式定界符等混合在一起。似乎您只需要它:

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

有时您会在问题中显示 0.00% 而其他人会显示 0.0% 所以请确定您的输入文件真正包含的内容,但只需使用上面脚本中正确的那个即可。