我正在嘗試從 FILEDIGITS.txt 中過濾出一系列數字的第 2 列。
for i in `seq -f '%0.f\n' 66979300 100 66982300`; do
awk -v var=$i 'BEGIN{FS=OFS="\t"}{$2 == var }{print $0 }' FILEDIGITS.txt >> FILTERED.txt
done
然而沒有過濾它發生,FILTERED.TXT 與 FILEDIGITS.TXT 相同。
我檢查并請求的值出現在 FILEDIGITS.TXT 的第 2 列中,然后過濾應該成功發生。
我哪里錯了?非常感謝您的幫助!
uj5u.com熱心網友回復:
你知道這個很棒的頁面嗎?Awk - 教程和介紹 - Bruce Barnett - Grymoire
試試這個(編輯見@AndrejPodzimek的評論):
for i in `seq -f '%0.f\n' 66979300 100 66982300`; do
awk 'BEGIN {FS=OFS="\t"} ; $2 == var' var="${i}" FILEDIGITS.txt >> FILTERED.txt
done
uj5u.com熱心網友回復:
如果您只處理這些數字中的 31 個,不妨一次性將其全部分塊:
. . . input_data . . . |
{m,g}awk '!_<NF' FS="^[^\t]*[\t]($(jot -s'|' - 66979300 66982300 100))[\t]"
.
ps : use jot if u can instead of seq
該子外殼呼叫創建一個FS類似這樣的:
FS: "^[^\t]*[\t](66979300|66979400|66979500|66979600|66979700|
66979800|66979900|66980000|66980100|66980200|
66980300|66980400|66980500|66980600|66980700|
66980800|66980900|66981000|66981100|66981200|
66981300|66981400|66981500|66981600|66981700|
66981800|66981900|66982000|66982100|66982200|66982300)[\t]"
您可以制作各種數字范圍,例如:
FS: "^[^\t]*[\t](11111|15555|19999|24443|28887|33331|37775|42219|
46663|51107|55551|59995|64439|68883|73327|77771|
82215|86659|91103|95547|99991|""""104435|108879|
113323|117767|122211|126655|131099|135543|
139987|144431|148875|153319|157763|162207|
166651|171095|175539|179983|184427|188871|
193315|197759|202203|206647|211091|215535|
219979|224423|228867|233311|237755|242199|
246643|251087|255531|259975|264419|268863|
273307|277751|282195|286639|291083|295527|
299971|304415|308859|313303|317747|322191|326635|331079)[\t]"
設定OFS將是多余的,因為這純粹是一個過濾器,不需要任何自定義操作陳述句。
一旦你有了它FS,那么標準匹配就會以以下形式出現1 < NF
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489181.html
