簡體   English   中英

雖然讀取循環附加

[英]While read loop appending

我必須從file1提取與file2中的單詞列表相對應的行

我想知道這樣做有什么區別:

while read line; do grep "${line}" file1; done < file2 > output

while read line; do grep "${line}" file1 >> output; done < file2

哪一個是正確和最致命的?

除了循環,還有其他更快的方法嗎?

我正在處理的兩個文件分別為file1file2 5368648561947行。

文件 1(看起來 7 美元)

NC_045027.1     29500101        T/A     NC_045027.1:29500101    A       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2764     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500102        G/A     NC_045027.1:29500102    A       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2763     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500103        C/A     NC_045027.1:29500103    A       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2762     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500104        C/A     NC_045027.1:29500104    A       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2761     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500105        A/C     NC_045027.1:29500105    C       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2760     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500106        A/C     NC_045027.1:29500106    C       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2759     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500107        G/A     NC_045027.1:29500107    A       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2758     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500108        T/A     NC_045027.1:29500108    A       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2757     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500109        G/A     NC_045027.1:29500109    A       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2756     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_045027.1     29500110        G/A     NC_045027.1:29500110    A       101232882       XM_032744187.1  Transcript     3_prime_UTR_variant                                 2755     -       -       -       -       -       MODIFIER        -       -1      -       ARL14EPL        -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16147   C/A     NC_044998.1:16147       A       100221041       XM_030285707.2  Transcript      3_prime_UTR_variant                                        7416     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16147   C/A     NC_044998.1:16147       A       100221041       XM_030285715.2  Transcript      3_prime_UTR_variant                                        7234     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16147   C/A     NC_044998.1:16147       A       100221041       XM_030285720.2  Transcript      3_prime_UTR_variant                                        7110     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16147   C/A     NC_044998.1:16147       A       100221041       XM_030285728.2  Transcript      3_prime_UTR_variant                                        6856     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16147   C/A     NC_044998.1:16147       A       100221041       XM_030285733.2  Transcript      intron_variant                                             --       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -       -      ZFgenomic_tabixprep_nomiRNA.gff.gz                  --
NC_044998.1     16147   C/A     NC_044998.1:16147       A       100221041       XM_030285738.2  Transcript      3_prime_UTR_variant                                        6637     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16147   C/A     NC_044998.1:16147       A       100221041       XM_030285750.2  Transcript      3_prime_UTR_variant                                        6348     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16147   C/A     NC_044998.1:16147       A       100221041       XM_030285760.2  Transcript      3_prime_UTR_variant                                        7209     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16148   A/C     NC_044998.1:16148       C       100221041       XM_030285707.2  Transcript      3_prime_UTR_variant                                        7415     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -
NC_044998.1     16148   A/C     NC_044998.1:16148       C       100221041       XM_030285715.2  Transcript      3_prime_UTR_variant                                        7233     -       -       -       -       -       MODIFIER        -       -1      -       LOC100221041    -       -      -                                                   ZFgenomic_tabixprep_nomiRNA.gff.gz       -       -

文件 2

XM_032744187.1
XM_030272916.2
XM_032747381.1
XM_030265061.2
XM_030271469.2
XM_030272412.2
XM_032747456.1
while read line; do grep "${line}" file1; done < file2 > output

while read line; do grep "${line}" file1 >> output; done < file2

哪一個是正確和最快的?

第一個因為它只會打開輸出文件一次,而循環內的>> output將為file2每一行打開輸出文件。

除了循環,還有其他更快的方法嗎?

根據相關的更新信息,此awk將產生准確的匹配結果,而grep -fF無法grep -fF awk也會非常快,因為在對第二個文件中的$7進行非正則表達式字符串比較之前,我們只讀取內存中較小文件的第一列:

awk 'FNR == NR {seen[$1]; next} $7 in seen' file2 file1 > output

無循環: grep -f file2 file1

您可能會考慮grep -Ff file2 file1-F用於固定字符串。 如果您的file2不是正則表達式,而是純文本,則使用-F可以加快大型輸入的速度。

第一個將擦除在命令運行之前output可能具有的任何內容。

此外,第一個將只打開文件一次。 每次運行grep命令時,第二個將重新打開文件。 例如,如果您希望在命令運行時移動文件,這可能很重要。 如果您不需要擔心這種情況,您應該更喜歡第一個版本:它會稍微快一點,因為它不必一遍又一遍地執行目錄查找。

在不知道您想要完成什么的情況下,沒有辦法說哪一個是“正確的”。

對於該任務, fgrep 是您的朋友。 fgrep 的手冊頁看起來很清楚,所以我不會重復。 在這里你會說

fgrep -x -f file1 file2 > output

(-x 選項強制 fgrep 只匹配整行。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM