Bash:若文件存在,请读取第行,执行此操作*然后*然后*然后,继续执行下一行

Bash:若文件存在,请读取第行,执行此操作*然后*然后*然后,继续执行下一行,bash,awk,Bash,Awk,直截了当地说:我需要执行以下操作(psuedo代码): 我需要输出如下所示: Do stuff for host_1 Do stuff for host_2 Do stuff for host_3 Do stuff for host_4 我现在尝试的是: Do stuff for host_1 Do stuff for host_3 Do stuff for host_5 Do stuff for host_7 then Do stuff for host_2 Do stuff for

直截了当地说:我需要执行以下操作(psuedo代码):

我需要输出如下所示:

Do stuff for host_1
Do stuff for host_2
Do stuff for host_3
Do stuff for host_4    
我现在尝试的是:

Do stuff for host_1
Do stuff for host_3
Do stuff for host_5
Do stuff for host_7
then
Do stuff for host_2
Do stuff for host_4
Do stuff for host_6
Do stuff for host_8
我不确定我是否说得很清楚,所以如果你需要进一步的澄清,请让我知道


谢谢

我相信你的目标可以在一句话中实现:

awk '{ print "Do stuff for " $1; print "Do stuff for " $2 }' filename
或者:

awk '{ printf "Do stuff for %s\nDo stuff for %s\n", $1, $2 }' filename

无需使用shell读取文件;只需将文件名直接传递给
awk
。上述解决方案的关键是,
awk
将从文件中读取,一条记录一条记录(此处:逐行),并将该行中的每个字段(此处:host_1、host_2等)编码为$1和$2。如果每行中的字段数量可变,则解决方案可能会有点不同(可能涉及
awk
中的循环),但上述情况很简单。

我相信您的目标可以在单个
awk
语句中实现:

awk '{ print "Do stuff for " $1; print "Do stuff for " $2 }' filename
或者:

awk '{ printf "Do stuff for %s\nDo stuff for %s\n", $1, $2 }' filename

无需使用shell读取文件;只需将文件名直接传递给
awk
。上述解决方案的关键是,
awk
将从文件中读取,一条记录一条记录(此处:逐行),并将该行中的每个字段(此处:host_1、host_2等)编码为$1和$2。如果每行中的字段数量可变,则解决方案可能会有点不同(可能涉及
awk
中的循环),但上述情况很简单。

在这种情况下,您希望使用for循环来迭代文件中的字:

for host in $(< filename); then
    Do something with $host
done
主机的
,单位为$(
或者,每行读2个单词

while read host_a host_b; do
    Do something with $host_a
    Do something with $host_b
done < filename
读取主机a主机b时;做
用$host_a做点什么
使用$host_b执行某些操作
完成<文件名

在这种情况下,您希望使用for循环迭代文件中的单词:

for host in $(< filename); then
    Do something with $host
done
主机的
,单位为$(
或者,每行读2个单词

while read host_a host_b; do
    Do something with $host_a
    Do something with $host_b
done < filename
读取主机a主机b时;做
用$host_a做点什么
使用$host_b执行某些操作
完成<文件名

Drr…这很有道理。谢谢,这很有道理。谢谢,你能不能用$(cat文件)为F编写一个bash for loop
;do echo“为$F做事情”;完成
不幸的是没有-将awk链接在一起就可以了,谢谢!你能不能在$(cat文件)中为F编写一个bash for loop
;do echo“为$F做事情”;完成
不幸的是没有-将awk链接在一起就可以了,谢谢!