应该有2个文件。一个文件包含用户列表,其他文件包含密码列表。 用户文件有5个用户,密码文件也有5个密码。我在这里要做的是创建一个新文件,并将每个用户与密码文件中的所有可用密码配对。例如:用户1将与密码1,2,3,4,5配对。用户2将与密码1,2,3,4,5等配对。
我的问题是: 1.这里应该使用什么循环? 我的头说配对我们需要使用嵌套for循环。这是对的吗? 3.我可以想象复制内容的第一部分,但我无法想象如何配对它们。所以我需要帮助和建议。
编辑:
示例输入是名为Username和Password的2个文件。
用户名文件:
用户1
用户2
...
用户5
密码文件:
1步
2步
...
PASS5
预期输出为:
用户1-1步
用户1-2步
...
用户1-PASS5
用户2-1步
用户2-2步
...
用户2-PASS5
依此类推,直至达到User5-Pass5
感谢。
答案 0 :(得分:2)
广告1.,2。是的,需要嵌套循环。
我们希望每行一个用户和每行一个密码,然后代码为:
> concat # delete file content
for usr in `cat file_with_users`
do
for pwd in `cat file_with_passwords`
do
echo "$usr-$pwd" >> result_file
done
done
如果您编写输入样本和预期输出,我可以写一些更具体的内容。
答案 1 :(得分:1)
始终有更好的方式
$ join -t, -j 99 users pwords | cut -d, -f2-
例如
$ echo u{1..5} | tr ' ' '\n' > users
$ echo p{1..5} | tr ' ' '\n' > pwords
$ join -t, -j 99 users pwords | cut -d, -f2-
u1,p1
u1,p2
u1,p3
u1,p4
u1,p5
u2,p1
u2,p2
...
u5,p4
u5,p5
将-
分隔符更改为join -t- -j 99 users pwords | cut -d- -f2-
这是使用虚构列(第99列)在每行之间创建连接,称为交叉产品。由于输出的第一个位置缺少键,我们需要在结尾处将其删除。
答案 2 :(得分:0)
请执行以下任一操作:
grep -Fwf file1 file2 or
awk 'NR==FNR{A[$1];next}$1 in A' file1 file2