Unix Shell Scripting - 在While循环中添加额外的列

时间:2017-03-16 17:47:14

标签: bash shell loops unix while-loop

我有一个包含不同主机名的文件server.txt,如:

hostname1.com
hostname2.com

编写我的shell脚本servers.sh是为了从/etc/passwd文件的列表中获取/etc/groupservers.txt个文件。

我希望在最终输出文件中添加条目来自的主机名。我的脚本如下所示:

while read HOST ;
        do
           sshpass -p $password ssh -n $username@$HOST 'cat /etc/passwd'>>users.txt
           sshpass -p $password ssh -n $username@$HOST 'cat /etc/group'>>groups.txt
done < servers.txt
echo -e "UserName;UID;GID;HomeDir;Shell" > final_users.csv
cut -d: -f1,3,4,6,7 users.txt  | tr ':' ';'>> final_users.csv
echo -e "GroupName;GID;Members" > final_groups.csv
awk -F '[:,]' '{for(i=4;i<=NF;i++)print$1";"$3";"$i}' groups.txt >> final_groups.csv

目标是在final_users.csvfinal_groups.csv中添加另一列,例如hostname,以便我知道每个条目来自哪些服务器。

2 个答案:

答案 0 :(得分:0)

试试这样:

while read HOST ;
        do
           sshpass -p $password ssh -n $username@$HOST 'cat /etc/passwd'>>users.txt
           sshpass -p $password ssh -n $username@$HOST 'cat /etc/group'>>groups.txt
done < servers.txt
echo -e "UserName;UID;GID;HomeDir;Shell;Hostname" > final_users.csv
echo "`cut -d: -f1,3,4,6,7 users.txt  | tr ':' ';'`;$HOST">> final_users.csv
echo -e "GroupName;GID;Members;Hostname" > final_groups.csv
echo "`awk -F '[:,]' '{for(i=4;i<=NF;i++)print$1";"$3";"$i}' groups.txt`;$HOST" >> final_groups.csv

答案 1 :(得分:0)

想想我明白了:

while read HOST ;
        do
           sshpass -p $password ssh -n $username@$HOST 'cat /etc/passwd'>>users_1.txt
           while IFS= read -r line; do echo "$line:"$HOST; done < users_1.txt >> users_2.txt
           sshpass -p $password ssh -n $username@$HOST 'cat /etc/group'>>groups_1.txt
           while IFS= read -r line; do echo "$line:"$HOST; done < groups_1.txt >> groups_2.txt
done < servers.txt
echo -e "UserName;UID;GID;HomeDir;Shell;Hostname" > final_users.csv
cut -d: -f1,3,4,6,7,8 users_2.txt  | tr ':' ';'>> final_users.csv
echo -e "GroupName;GID;Members;Hostname" > final_groups.csv
awk -F'[:,]' -v OFS=';' '{for(i=4;i<NF;i++) print $1, $3, $i, $NF}' groups_2.txt >> final_groups.csv