我写了一个脚本,目的是从列表中过滤出一些特定的数据,现在我想让这个脚本“通用”。我遇到的问题是awk内部的变量。原始脚本中的行是:
awk '{if ($2>127931962 && $3<127932966 || $2>127996058 && $3<127997050 || $2>128098961 && $3<128099960) print}' file.input > file.output
我想要的是用户能够在括号内输入自己的参数,这样他们就可以根据自己的需要过滤数据。
所以我尝试引入一个变量,用户可以在其中输入括号内的信息,但是awk没有过滤掉这些信息。
read region
awk -v reg="$region" '{if (reg) print}' file.input > file.output
当我运行它时,我写道:$2>127931962 && $3<127932966 || $2>127996058 && $3<127997050 || $2>128098961 && $3<128099960
作为区域变量的输入,但输出文件与其应有的文件有很大不同。
这是输出文件外观的简短版本(与输入文件相同)
chr8 127930849 127930868
chr8 127931470 127931489
chr8 127931566 127931591
chr8 127931835 127931864
chr8 127932730 127932832
chr8 127932932 127932959
chr8 127933558 127933606
chr8 127933643 127933703
chr8 127933933 127933964
chr8 127934398 127934441
chr8 127938801 127938829
chr8 127939525 127939567
chr8 127939831 127939861
chr8 127939982 127940052
chr8 127940599 127940667
chr8 127940793 127940801
chr8 127941253 127941281
chr8 127942688 127942701
chr8 127943013 127943087
chr8 127943120 127943150
chr8 127943869 127943898
chr8 127943970 127944025
chr8 127944110 127944145
chr8 127944601 127944653
chr8 127945071 127945107
chr8 127945219 127945251
chr8 127945476 127945505
chr8 127946041 127946068
chr8 127946929 127946959
chr8 127947647 127947726
chr8 127948225 127948260
chr8 127948305 127948329
chr8 127948817 127948819
chr8 127949074 127949151
chr8 127949778 127949840
chr8 127949860 127949882
chr8 127949974 127949985
chr8 127950185 127950200
chr8 127950597 127950630
chr8 127951362 127951398
chr8 127951432 127951490
chr8 127951575 127951612
chr8 127951699 127951744
chr8 127953387 127953400
chr8 127953575 127953603
chr8 127953872 127953918
chr8 127953944 127953967
chr8 127954312 127954357
chr8 127954711 127954759
chr8 127955363 127955435
chr8 127956912 127956956
chr8 127957652 127957700
chr8 127957763 127957845
chr8 127957861 127957923
chr8 127958039 127958099
chr8 127958612 127958631
chr8 127959113 127959137
chr8 127959790 127959859
chr8 127960003 127960043
chr8 127960134 127960150
chr8 127960209 127960253
chr8 127960534 127960575
chr8 127960673 127960676
chr8 127960964 127960998
chr8 127961096 127961131
chr8 127961245 127961260
chr8 127961443 127961554
chr8 127961636 127961687
chr8 127961806 127961833
chr8 127962640 127962659
chr8 127962947 127963009
chr8 127963630 127963650
chr8 127963689 127963857
chr8 127963983 127964056
chr8 127964314 127964351
chr8 127964845 127964881
chr8 127965043 127965078
chr8 127965436 127965472
chr8 127965715 127965742
chr8 127965780 127965825
chr8 127966280 127966348
chr8 127966429 127966438
chr8 127966509 127966541
chr8 127966902 127966941
chr8 127967110 127967124
chr8 127967165 127967185
chr8 127967328 127967369
chr8 127968417 127968454
chr8 127969238 127969298
chr8 127969444 127969480
chr8 127971434 127971460
chr8 127971888 127971969
chr8 127974432 127974478
chr8 127975488 127975521
chr8 127975897 127975937
chr8 127976398 127976414
chr8 127979577 127979644
chr8 127980065 127980114
chr8 127980370 127980409
chr8 127981172 127981208
chr8 127981779 127981795
chr8 127983603 127983628
chr8 127983894 127983907
chr8 127986216 127986259
chr8 127989050 127989084
chr8 127989396 127989467
chr8 127989479 127989542
chr8 127990103 127990133
chr8 127990222 127990230
chr8 127990364 127990369
chr8 127990496 127990526
chr8 127990577 127990627
chr8 127990851 127990913
chr8 127992550 127992592
chr8 127993294 127993328
chr8 127993675 127993694
chr8 127994293 127994309
chr8 127994688 127994759
chr8 127996207 127996249
chr8 127996269 127996290
chr8 127996382 127996388
chr8 127996563 127996584
chr8 127996730 127996750
chr8 127996777 127996855
chr8 127996868 127996875
chr8 127997078 127997092
chr8 127998007 127998021
chr8 127999104 127999140
chr8 127999332 127999412
chr8 128001461 128001467
chr8 128001985 128002075
chr8 128004411 128004443
chr8 128005521 128005594
chr8 128005681 128005711
chr8 128006503 128006542
chr8 128008720 128008846
chr8 128009697 128009699
chr8 128009849 128009875
chr8 128010431 128010480
chr8 128010507 128010536
chr8 128010651 128010674
chr8 128010764 128010837
chr8 128011861 128011881
chr8 128011947 128011979
chr8 128012172 128012222
chr8 128012728 128012739
chr8 128013389 128013438
chr8 128013625 128013632
chr8 128014048 128014070
chr8 128014181 128014216
chr8 128014274 128014357
chr8 128014526 128014583
chr8 128014659 128014702
chr8 128014741 128014764
chr8 128015013 128015049
chr8 128016027 128016076
chr8 128016455 128016468
chr8 128017138 128017171
chr8 128017283 128017317
chr8 128017459 128017488
chr8 128017614 128017648
chr8 128017770 128017781
chr8 128017784 128017827
chr8 128018091 128018130
chr8 128018374 128018425
chr8 128018549 128018583
chr8 128018606 128018730
chr8 128019372 128019433
chr8 128019701 128019738
chr8 128019917 128019942
chr8 128020493 128020519
chr8 128020776 128020815
chr8 128020955 128020970
chr8 128020998 128021043
chr8 128021096 128021119
chr8 128021653 128021664
chr8 128021804 128021856
chr8 128021874 128021918
chr8 128022132 128022189
chr8 128022236 128022250
chr8 128022459 128022473
chr8 128022617 128022660
chr8 128024100 128024144
chr8 128024825 128024832
chr8 128025115 128025156
chr8 128025342 128025402
chr8 128025965 128026009
chr8 128026746 128026768
chr8 128027151 128027205
chr8 128028047 128028061
chr8 128028426 128028458
chr8 128028759 128028804
chr8 128028863 128028898
chr8 128030421 128030506
chr8 128030604 128030626
chr8 128030670 128030679
chr8 128031229 128031304
chr8 128031413 128031486
chr8 128032121 128032136
chr8 128032284 128032301
chr8 128032506 128032511
chr8 128032576 128032579
chr8 128032746 128032779
chr8 128032980 128033047
chr8 128033329 128033381
chr8 128033951 128033977
chr8 128034307 128034325
chr8 128034513 128034554
chr8 128034940 128034986
chr8 128035280 128035297
chr8 128035749 128035824
chr8 128035896 128035924
chr8 128036506 128036545
chr8 128036586 128036619
chr8 128036713 128036739
chr8 128036989 128037053
chr8 128037311 128037326
chr8 128037606 128037627
chr8 128037990 128038045
chr8 128038372 128038413
chr8 128038491 128038541
chr8 128038705 128038775
chr8 128039144 128039172
chr8 128039888 128039928
chr8 128040111 128040146
chr8 128041045 128041087
chr8 128041125 128041160
chr8 128041858 128041878
chr8 128041910 128041958
chr8 128042351 128042472
chr8 128043440 128043476
chr8 128044241 128044261
chr8 128044844 128044897
chr8 128045167 128045193
chr8 128045384 128045419
chr8 128046080 128046111
chr8 128047597 128047613
chr8 128048745 128048794
chr8 128049126 128049174
chr8 128049176 128049192
chr8 128049444 128049483
chr8 128051155 128051190
chr8 128051297 128051347
chr8 128051464 128051486
chr8 128052121 128052127
chr8 128052649 128052706
chr8 128053083 128053143
chr8 128053319 128053363
chr8 128054084 128054115
chr8 128054459 128054485
chr8 128054738 128054779
chr8 128055454 128055495
chr8 128055651 128055677
chr8 128055718 128055755
chr8 128056285 128056296
chr8 128056360 128056391
chr8 128057004 128057045
chr8 128057273 128057315
chr8 128057676 128057711
chr8 128058298 128058353
chr8 128058509 128058548
chr8 128059258 128059301
chr8 128059968 128060005
chr8 128060510 128060538
chr8 128061457 128061462
chr8 128061583 128061649
chr8 128061768 128061784
chr8 128061998 128062040
chr8 128062794 128062848
chr8 128062871 128062906
chr8 128062941 128062959
chr8 128063113 128063123
chr8 128064324 128064352
chr8 128065677 128065725
chr8 128065777 128065817
chr8 128065868 128065908
chr8 128066672 128066726
chr8 128071471 128071484
chr8 128071766 128071818
chr8 128072861 128072876
chr8 128074175 128074210
chr8 128076452 128076469
chr8 128077214 128077266
chr8 128077988 128078018
chr8 128081166 128081221
chr8 128086286 128086332
chr8 128088636 128088662
chr8 128090615 128090658
chr8 128091762 128091773
chr8 128091893 128091917
chr8 128094952 128094985
chr8 128095198 128095226
chr8 128095344 128095390
chr8 128095573 128095670
chr8 128095769 128095803
chr8 128095861 128095908
chr8 128096424 128096462
chr8 128096747 128096781
chr8 128096960 128096988
chr8 128097064 128097103
chr8 128099904 128099920
chr8 128100008 128100016
chr8 128100513 128100607
chr8 128100840 128100919
chr8 128101086 128101124
chr8 128101177 128101193
chr8 131904404 131904433
chr8 131909271 131909320
它应该是这样的(注意第2列和第3列在参数范围内):
chr8 127932730 127932832
chr8 127932932 127932959
chr8 127996207 127996249
chr8 127996269 127996290
chr8 127996382 127996388
chr8 127996563 127996584
chr8 127996730 127996750
chr8 127996777 127996855
chr8 127996868 127996875
chr8 128099904 128099920
有人能解释一下我做错了什么吗?
4条答案
按热度按时间fwzugrvs1#
不要在shell中编写awk语法,然后让shell在awk看到它之前将其解释为awk脚本的一部分,因为这是两个工具的紧密耦合,并打开了隐藏问题的大门。相反,只需在shell中定义范围列表,然后将范围列表从shell传递到awk,并编写awk脚本来决定如何处理它们,例如,使用任何awk:
您的脚本中的问题是尝试在awk脚本中使用shell变量-请参阅How do I use shell variables in an awk script?以了解更多信息。
6pp0gazn2#
我想解释一下
它确实将 * reg * 变量视为字符串,因为它不是空字符串,所以被视为真值,请考虑以下简单示例,假设
file.txt
内容为那么
给出输出
wydwbb8l3#
您可以通过连接构建awk脚本:
编辑这是不寻常的,请参阅其他可行解决方案的答案(@Ed Morton的答案)
fquxozlt4#
@Nikolas:你基本上是想创造这样的规则吗
$2
具有绝对下限,并且$3
是否在$2 + (0.0775 to 0.0785 bps)
范围内?