如何使用来自不同文件的值创建循环?

时间:2017-06-07 19:21:16

标签: bash awk grep find

我有一个包含以下号码的文件 FILE1.TXT

1
5
6
8
14

我有另一个名为rmsd.txt的文件,其中包含如下所示的值

1 2.12
2 3.1243
3 4.156
4 3.22
5 3.882
6 8.638
7 8.838
8 7.5373
9 10.7373
10 8.3527
11 3.822
12 5.672
13 7.23
14 5.9292

我想从rmsd.txt获取第2列的值,以获取file.txt中的数字。我希望得到类似下面的内容

1 2.12
5 3.882
6 8.638
8 7.5373
14 5.9292

我可以像grep 1 rmsd.txt那样做,等等,但这需要很长时间。我正在尝试类似

的for循环
for a in awk '{print $1}' file.txt; do
grep $a rmsd.txt >result.txt
done

但它没有用。也许这很简单,我在思考方向错误。任何帮助将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

for WORD in `cat FILE`
do
   echo $WORD
   command $WORD > $WORD
done

Origina source

编辑:这是您的代码,几乎没有修复:

for a in `awk '{print $1}' file.txt`
do
    grep $a rmsd.txt >>result.txt
done

答案 1 :(得分:0)

这是为awk定制的工作:

awk 'NR==FNR{a[$1]; next} $1 in a' file1.txt msd.txt

1 2.12
5 3.882
6 8.638
8 7.5373
14 5.9292

很可能它是重复的,只要我找到一个好的副本,我就会标记它。

答案 2 :(得分:0)

awk救援!

$ awk 'NR==FNR{a[$1];next} $1 in a' file1 file2

1 2.12
5 3.882
6 8.638
8 7.5373
14 5.9292

sort/join

$ join <(sort file1) <(sort file2) | sort -n

grep/sed

$ grep -f <(sed 's/.*/^&\\b/' file1) file2