用于随机生成两组单词之间映射的脚本

时间:2014-04-16 22:55:17

标签: shell awk sed mapping

E.g。输入是两组A和B.

集合A存储在文件a.txt中,如下所示:

apple
orange
grape
...

集合B存储在文件b.txt中,如下所示:

tomato
potato
cucumber
...

输出为c.txt,如:

apple    potato
orange   tomato
grape    celery
...      ...

请注意,它们之间的映射是随机生成的。即每次

map.sh a.txt b.txt > c.txt

通常会给出不同的映射。

这可以在shell(或awk,sed)中实现吗?

2 个答案:

答案 0 :(得分:3)

paste <(shuf a.txt) <(shuf b.txt)

如果您希望第一列保持不变,您只需提供a.txt作为paste的第一个参数:

paste a.txt <(shuf b.txt)

答案 1 :(得分:0)

如果 希望在Awk中执行此操作,则可以使用rand()。只需确保每次都设置一个新的随机种子(srand()):

$ awk ' BEGIN { srand() }
    NR == FNR {
        a[rand(), NR] = $1; 
        next;
    } 
    1 == FNR { asorti(a, v) } 
    {
        i = length(v); 
        j = v[i];
        delete v[i]; 
        print $1, a[j];
    }
' a.txt b.txt

tomato orange
potato apple
cucumber grape

$ awk ' BEGIN { srand() }
    NR == FNR {
        a[rand(), NR] = $1; 
        next;
    } 
    1 == FNR { asorti(a, v) } 
    {
        i = length(v); 
        j = v[i];
        delete v[i]; 
        print $1, a[j];
    }
' a.txt b.txt

tomato apple
potato orange
cucumber grape