【问题标题】:How to create a loop using values from a different file? [duplicate]如何使用来自不同文件的值创建循环? [复制]
【发布时间】:2017-06-07 19:21:16
【问题描述】:

我有一个包含以下数字的文件 文件1.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

但它没有用。也许这很简单,我在想一个错误的方向。任何帮助将不胜感激。

【问题讨论】:

  • 这是怎么被问到的每一天...你试过在谷歌上搜索how to match field from one file in another吗?

标签: bash awk grep find


【解决方案1】:
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

【讨论】:

  • 哦,我知道你已经知道了。但是您错过了版本中的反引号。
【解决方案2】:

这是为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

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

【讨论】:

  • 大声笑你已经发布了多少次这个确切的答案。
  • lol :) 我打算写它很可能是一个 dup 但我现在无法找到确切的 dup
  • 这里一样,输入比搜索更容易。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 2019-12-24
    • 2011-09-05
    • 1970-01-01
    • 2015-07-14
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多