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%
所以请确定您的输入文件真正包含的内容,但只需使用上面脚本中正确的那个即可。
我有一个 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%
所以请确定您的输入文件真正包含的内容,但只需使用上面脚本中正确的那个即可。