根据来自不同文件

时间:2015-11-01 21:20:55

标签: linux shell

我有一个包含两列的文件(f1); f1如下所示:

bob population1
sam population1
jen population2
amy population2
jim population3
bob population3
doc population4
allison population4
zoe population5
karla population5

在另一个文件(f2)中,我指定了我希望f1中的个体如何根据其人口进行排序; f2如下所示:

population4
population1
population2
population5
population3

我正在寻找以下结果:

doc population4
allison population4
bob population1
sam population1
jen population2
amy population2
zoe population5
karla population5
jim population3
bob population3

有人可以就如何实现这一结果向我提出建议吗?

1 个答案:

答案 0 :(得分:1)

你可以循环来自f2的行,从f1中为每一行提取匹配的行:

while read s ; do
    grep "$s" f1
done  < f2

或者,没有循环,

的一些变化
nl f2 \
| sed 's=\([0-9]\+\)\t\(.*\)=s/\2/\1 \2/=' \
| sed -f- <(nl f1) \
| sort -nk3,3

即。对两个文件中的行进行编号,将“populationX”替换为其对应的数字,然后按数字排序。