目前我有两个文件,两个制表符分隔表,我想搜索文件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
答案 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