文件1:
1F
2F
3F
4F
5f
文件2:
1F
2F
3F
4F
5f
我有一个简单的代码,可以产生所有可能的组合
#!/bin/bash
for a in $(awk '{print $1}' intf1)
do
for b in $(awk '{print $1}' intf2)
do
echo -e "$a:$b" >> file
done
done
此代码的输出:
1F:1F
1F:2F
1F:3F
1F:4F
2F:1F
etc
但我想:
1)完全避免重复
2)"选择号码" (他将从第二个文件中获取的单词(行)数量):
第二个文件中的每两行:
1F:2F
1F:3F
2F:3F
2F:4F
3F:4F
3F:5F
4F:5F
第二个文件中的每三行:
1F:2F
1F:3F
1F:4F
2F:3F
2F:4F
2F:5F
etc..
等等
答案 0 :(得分:0)
如果文件可以排序(并排除重复行),这可能有效:
printf "%s\n" $(eval "echo {$(sort -u file.txt | paste -sd, -)}:{$(sort -u file2.txt | head -2 | paste -sd, -)}") | sort -u
它使用bash扩展来生成组合,例如:
$ echo {a,b}{X,Y,Z}
aX aY aZ bX bY bZ
另外,您必须绝对信任文件的内容,因为代码使用了危险的eval
。
head
之类的head -2
的参数可用于限制来自file2.txt
代码生成(通过将第二个文件限制为2个已排序的行)以下内容:
20160702F:20160702F
20160702F:20160714F
20160714F:20160702F
20160714F:20160714F
20160807F:20160702F
20160807F:20160714F
20160819F:20160702F
20160819F:20160714F
20160831F:20160702F
20160831F:20160714F
20160912F:20160702F
20160912F:20160714F