0

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

if [ -f <file_that_exists> ]

then

while read
do


awk '{print "do stuff for " $1}' THEN immediately below it awk '{print "do stuff for" $2}'
Then continue to next line

我试图解析的文件有两列(如果你愿意的话,主机对):

host_1     host_2
host_3     host_4

我需要的输出如下所示:

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

我不确定我是否说得很清楚,所以如果您需要进一步澄清,请告诉我。

谢谢!

4

2 回答 2

3

我相信您的目标可以在一个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),但以上是简单的情况。

于 2013-06-03T15:30:05.003 回答
0

在这种情况下,您希望使用 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
于 2013-06-04T01:52:20.003 回答