在while循环中读取2个文件BASH SCRIPTING

时间:2013-10-05 03:53:08

标签: bash csv

我有两个名为Group.csv的文件

thisisgroupone

和另一个名为Users.csv

的人
Testuser1,Testuser2,TestUser3

到目前为止我的脚本:

# this part of the script will now add the created users into the created group!
while IFS=, read col1 col2 col3
do
        usermod  -g $READ GROUP.CSV$ $col1
        usermod  -g $READ GROUP.CSV$ $col2
        usermod  -g $READ GROUP.CSV$ $col3

    done < Users.csv

echo "Users now moved to new group sepcifyed in Group.csv"
  • 我试图想办法一次读取两个文件来完成这个陈述。

谢谢= D

2 个答案:

答案 0 :(得分:4)

一种技巧是:

while IFS=, read col1 col2 col3
do
        read -u 3 GROUP
        usermod  -g $GROUP $col1
        usermod  -g $GROUP $col2
        usermod  -g $GROUP $col3
done < Users.csv 3< Group.csv

while IFS=, read col1 col2 col3 && read -u 3 GROUP
do
        usermod  -g $GROUP $col1
        usermod  -g $GROUP $col2
        usermod  -g $GROUP $col3 
done < Users.csv 3< Group.csv

上述任何一项都不能确保文件的行数相同,您可能需要检查一下。

答案 1 :(得分:2)

paste -d' ' Group.csv Users.csv将生成输出,例如:

Testgroup1 Testuser1 Testuser2 Testuser3
Testgroup2 Testuser4 Testuser5 Testuser6
...

因此您可以将此输出发送到您的脚本,它可以读取单个文件中的行,其中每行的第一个字段是组,其余的是用户。

您可以使用|paste的输出直接发送到您的脚本。或者,您可以创建临时文件paste -d' ' Group.csv Users.csv > temp.csv,然后使用< temp.csv来读取文件。