直截了当:我需要执行以下操作(伪代码):
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
我不确定自己是否非常清楚,所以如果您需要进一步澄清,请告诉我。
谢谢!
答案 0 :(得分: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
内的循环),但上面的情况很简单。
答案 1 :(得分: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