通过配对linux

时间:2016-03-30 17:33:15

标签: linux bash shell unix sh

应该有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

感谢。

3 个答案:

答案 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