Command-Line
科學計數法文本文件中特定數字的計數頻率
背景
我有一個文本文件,命名
blood_conc.txt
如下:0, 0, 0, 0, 0, 0, 0, 1.32006590271e-05, 1.990014992001e-05, 1.504668143682e-05, 2.176900659261e-06, 7.673488970859e-06, 2.169217049562e-05, 4.343183585883e-05, 0, 0, 0, 0, 0, 0, 0, 2.143804950099e-05, 0, 0, 1.849919603625e-06, 0, 0, 0, 0, 0, 0, 0, 4.123812986073e-07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001365177, 7.81009e-06, 2.695291e-07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.1799e-05, 1.82574e-05, 1.68109e-05, 2.722782e-05, 5.355517e-05, 8.196468e-05, 7.177729e-05, 7.863765e-05, 5.774439e-05, 1.329413e-08, 0, 0, 0, 4.320018e-06, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0003335425, 0, 0, 0, 0, 0, 0, 0, 0, 6.061237e-05, 6.36887e-05, 2.250928e-05, 0, 0, 7.327124e-07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
我想計算第3 行到第 8 行之間的**0數。**IE
2.143804950099e-05, 0, 0, 1.849919603625e-06, 0, 0, 0, 0, 0, 0, 0, 4.123812986073e-07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0001365177, 7.81009e-06, 2.695291e-07, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.1799e-05, 1.82574e-05, 1.68109e-05, 2.722782e-05, 5.355517e-05, 8.196468e-05, 7.177729e-05, 7.863765e-05, 5.774439e-05,
0的頻率應該是54。
我想要一個簡單的命令行來完成兩個任務:
任務 1:計算第 3 行到第 8 行文本中0的個數。
任務 2:計算位於區間之間的值的數量,例如,(2.452555e-05, 0.0032784)。
我的想法
我在網路和文章中進行了一些搜尋。我找到
awk
並grep -c
可能會有所幫助。為了集中線條的範圍,我想我可以使用
awk 'NR==3, NR==8' blood_conc.txt
.但是,我不知道如何繼續使用
grep
orperl
。我想要一個簡單的命令行,它只返回我的頻率。
你可以試試這個
awk
:awk -F"," 'NR == 3, NR == 8 { for (i = 1; i <= NF; i++) { if ($i == 0) { cnt++; } if ($i >= 2.452555e-05 && $i <= 0.0032784) { cnt1++; } } } END { print cnt, cnt1; }' file
你的出發點很好;現在您必須遍歷欄位,其中的前提是定義適當的欄位分隔符。要計算零:
awk ' BEGIN { FS="[, ]+" } NR==3, NR==8 { for (i=1; i<=NF; i++) if ($i==0) c++ } END { print c } '
為了檢查範圍,
if
相應地更改條件,例如:if ($i >= ... && $i <= ...)
.