[英]Extracting lines for a range in a column with awk
我有一個巨大的gzipped
文件,根據第二列的范圍,我想提取它的某些行。
file1.txt.gz
的開頭是:
zcat file1.txt.gz | head
1 1001 F K 999
1 1002 N G 340
1 1003 H B 889
1 1004 D F 399
1 1005 C X 311
2 1002 E F 233
2 1002 F C 334
3 1001 F C 331
我想提取以1
開頭的行,並將second columns
從1001
到1003
(包括1003
)。
所以預期的輸出是:
1 1001 F K 999
1 1002 N G 340
1 1003 H B 889
我unzipping
壓縮壓縮文件的頭部,然后應用以下命令,它工作,給出預期的輸出。 ( zcat file1.txt.gz | head | LC_ALL=C parallel -j 32 --block 10M --pipe grep -w "^1" | awk '$2 ~ /'1001'/,/'1003'/'
)
但是,如果我從unzipping
開始, awk
范圍過濾不起作用,它會抓取從1
開始的所有內容:
zcat file1.txt.gz | LC_ALL=C parallel -j 32 --block 10M --pipe grep -w "^1" | awk '$2 ~ /'1001'/,/'1003'/' > output.txt
現在, output.txt
:
1 1001 F K 999
1 1002 N G 340
1 1003 H B 889
1 1004 D F 399
1 1005 C X 311
PS:我從bash
腳本調用命令,並從用戶輸入接受范圍( 1001
和1003
)。
你能告訴我我錯過了什么以及如何解決它嗎?
如您在POST中所述,第1
列以1
開頭:
zcat file1.txt.gz | awk '/^1/ && $2 >= 1001 && $2 <= 1003'
或者如果您需要第1
列為1
字面:
zcat file1.txt.gz | awk '$1 == 1 && $2 >= 1001 && $2 <= 1003'
1 1001 F K 999
1 1002 N G 340
1 1003 H B 889
{print}
語句,因為awk的默認行為是在滿足TRUE
條件時打印 你可以嘗試一下,讓我知道這是否對你有幫助。 這將尋找第一列應為1
。
zcat file1.txt.gz | awk '$1==1 && ($2>=1001 && $2<=1003)'
如果您需要查找從`開始的行,那么請執行以下操作。
zcat file1.txt.gz | awk '/^1/ && ($2>=1001 && $2<=1003)'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.