linux - 需要帮助 shell 脚本来过滤所有者机器列表

标签 linux shell unix awk scripting

我已经为几乎 2000 台主机的每台机器自动更改密码。我写了下面的脚本。

  #!/bin/bash
  while read line
  do
  ip=`cat /root/file | awk ' { print $1 } '`
  owner=`cat /root/file | awk ' { print $2 } '`
  function randpass() {
  [ "$2" == "13" ] && CHAR="[:alnum:]" || CHAR="[:graph:]"
  cat /dev/urandom | tr -cd "$CHAR" | head -c 8
  echo
  }
  newpass=`randpass`
  ssh $ip "mkdir -p /home/dev/.vnc"
  ssh $ip "echo $newpass | vncpasswd -f > /home/dev/.vnc/passwd"
  ssh $ip "chown -R dev:dev /home/dev/.vnc"
  ssh $ip "chmod 0600 /home/dev/.vnc/passwd"
  ssh $ip "echo "$newpass" | passwd --stdin dev"
   #ssh $ip "echo -e "dev:$newpass" | chpasswd"
   echo -e "$ip:$newpass:$owner" >> `date +"%d-%m-%y"`
   done < /root/file

它生成以下输出到文件:

  10.10.10.100:password1:bob1
  10.10.10.101:password2:bob2
  10.10.10.102:password3:bob3
  10.10.10.104:password5:bob1
  10.10.10.102:password4:bob3
  10.10.10.108:password8:bob1

我需要添加额外的脚本请帮忙

从上面的文件输出我需要生成如下文件:

文件名 bob1(这是用户名):

  10.10.10.108:password8
  10.10.10.104:password5
  10.10.10.100:password1

文件名 bob2:

  10.10.10.101:password2

文件名bob3:

    10.10.10.102:password3
    10.10.10.102:password4

注意:用户名可能会更改并添加更多用户名

最佳答案

使用 AWK:

awk -F: -vOFS=: '{ a = $NF; NF--; print > a }' file

命令设置输入输出field separators:。该脚本将最后一个字段 $NF 保存到 a 变量中,减少字段数,并将其余字段打印到文件名等于 值的文件中code>a 通过 output redirection (>)。

请注意,使用冒号作为字段分隔符是可靠的,因为我们只获取最后一个字段,而最后一个字段是不允许使用冒号字符的用户名。

关于linux - 需要帮助 shell 脚本来过滤所有者机器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41188679/

相关文章:

linux - 如何使用 meld 比较不同目录中的两个同名文件(不给出路径)?

java - Windows 中出现奇怪的 Java lambda 错误,但 Linux 中没有

macos - 双击 shell 脚本问题(Mac 上的 .COMMAND)

perl - 从多个文件中剪切特定列并使用 unix 工具 reshape

linux - 命令行日期格式化帮助

linux - grep特定单词

linux - apache 核心转储文件

linux - 在 sed/awk/grep 中将日期从 2012-01-31 更改为 31-01-2012

bash - set -e 和后台进程

shell - MacOS Sierra 上的 sudo 命令不遵守 timestamp_timeout