比较2个文件,如果找到一个术语,将该行复制到新文件中

时间:2014-05-22 09:47:19

标签: bash

目前我有两个文件,两个制表符分隔表,我想搜索文件2并检查文件1中的术语是否找到。如果是,我希望它写入新文件。

文件2中的前3行:

OTU1    243622  208679  121420  265864  0   0   2   0   0   11  1   5   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   839604  OTU1    -   Archaea 100%    Euryarchaeota   100%    Methanobacteria 100%    Methanobacteriales  100%    Methanobacteriaceae 100%    Methanobrevibacter  100%
OTU2    84366   120817  15834   74737   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   295755  OTU2    -   Archaea 100%    Euryarchaeota   100%    Methanobacteria 100%    Methanobacteriales  100%    Methanobacteriaceae 100%    Methanobrevibacter  100%
OTU3    69  755 26301   64521   0   0   0   0   0   0   0   0   0   0   0   0   0 

文件1的前3行:

"T2"    "T1"    "T3"    "T4"
"OTU19" 0   -0.437896457691538  0.31428903747861    0.619419210019158
"OTU25" 0   -0.29142378361388   -1.32473342078438   0.359748539739627
"OTU33" 0   -1.07342236097376   -0.0136125408176803 0.00324835637083578

我现在有这个代码,之前工作正常,但没有这些文件。有没有人知道为什么?

cat file1 | xargs -I % grep "%       " file2 > file1.results   

1 个答案:

答案 0 :(得分:0)

#!/bin/bash
    for word in $(tr -cs '[0-9a-zA-z ]' '\n' < file1)
    do 

       grep -o $word file2 >> file1.results   

    done 

如果您不希望在file1.results中附加任何单词,那么您可以编写一个单词 内部if中的for条件,并在if条件下使用continue内部跳过该迭代。 像:

#!/bin/bash

    for word in $(tr -cs '[0-9a-zA-z ]' '\n' < file1)
    do 

       if [ "$word" == '0' ]; then
          continue
       fi

       grep -o $word file2 >> file1.results   

    done