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)中实现吗?
答案 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