Linux awk并行运行吗?

Linux awk并行运行吗?,linux,bash,awk,ssh,parallel-processing,Linux,Bash,Awk,Ssh,Parallel Processing,任务-SSH连接到650台服务器,从中获取一些详细信息,然后将完成的服务器名称写入不同的文件中。怎样才能更快地完成?如果我使用普通ssh,则需要7分钟。因此,我阅读了关于awk的文章,并编写了以下两个代码 你能解释一下下列代码的区别吗 代码1- awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"} { print "blah"|"ssh -o StrictHostKeyChecking=no -o

任务-SSH连接到650台服务器,从中获取一些详细信息,然后将完成的服务器名称写入不同的文件中。怎样才能更快地完成?如果我使用普通ssh,则需要7分钟。因此,我阅读了关于awk的文章,并编写了以下两个代码

你能解释一下下列代码的区别吗

代码1-

awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"}
     {
        print "blah"|"ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=1 -o ConnectionAttempts=1 "$0" uname >/dev/null 2>&1";
    print "$0" >> done_file
     }' /tmp/linux
awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"}
     {
        "ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=1 -o ConnectionAttempts=1 "$0" uname 2>/dev/null"|getline output;
         print output >> done_file

     }' /tmp/linux
代码2-

awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"}
     {
        print "blah"|"ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=1 -o ConnectionAttempts=1 "$0" uname >/dev/null 2>&1";
    print "$0" >> done_file
     }' /tmp/linux
awk 'BEGIN{done_file="/home/sarafa/AWK_FASTER/done_status.txt"}
     {
        "ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=1 -o ConnectionAttempts=1 "$0" uname 2>/dev/null"|getline output;
         print output >> done_file

     }' /tmp/linux
当我为650台服务器运行这些代码时,代码1需要-30秒,代码2需要7分钟? 为什么时差这么大


文件-/tmp/linux是650台服务器的列表

更新的答案——感谢@OleTange

这种形式比我的建议更可取:

parallel -j 0 --tag --slf /tmp/linux --nonall 'hostname;ls' 
--用参数标记标记行。每个输出行都将预先设置 使用参数和选项卡(\t)。当与--onall或 --所有行都将在前面加上sshlogin 相反

--nonall——不带参数的onall。在所有计算机上运行该命令 使用--sshlogin给定,但不接受任何参数。GNU平行意志 登录到--并行计算机的作业数并运行 计算机上的作业-j调整要登录的计算机数量 同时。 这对于在服务器上运行相同的命令(例如正常运行时间)非常有用 服务器列表

原始答案

我建议对该任务使用
GNU Parallel
,如下所示:

parallel -j 64 -k -a /tmp/linux 'echo ssh user@{} "hostname; ls"'
它将以ssh方式并行运行64个主机(您可以更改数量),在每个主机上运行
hostname
ls
,然后按顺序向您提供所有结果(
-k
开关)


当您看到echo的工作原理时,显然要删除它。

我正在使用HPUX服务器来ssh运行在不同操作系统上的不同服务器(如RedHat、Aix、Solaris、HPUX本身)。此HPUX服务器没有此并行命令,也不允许我安装它。这些代码有什么不良影响吗?你不推荐这些吗?如果不是,那么为什么?
GNU Parallel
是一个Perl脚本-您不允许编写/使用Perl吗?对不起,我不能评论什么代码是好的或坏的,或者什么代码可以使用,什么代码不能使用——我想说的是,我相信GNU Parallel非常适合快速、准确、轻松地完成您的任务。可能还有其他方法,可能更好,也可能更糟,您可能被允许使用,也可能不被允许使用——如果有,那就好了;ls的“安装”可以像复制单个perl脚本一样简单。不需要Root。@OleTange再次感谢您的帮助和见解,Ole。