我有一个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%
的行的grepColumn 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
正则表达式似乎不起作用?
答案 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你输入文件真正包含的内容,但只使用上述脚本中的正确内容。