awk将不同行的不同列写入单行输出文件?

时间:2014-12-15 22:08:30

标签: bash awk while-loop

我正在使用while do循环从包含主机名列表的文件读入,对主机列表运行命令,并将结果中的特定数据输入到第二个文件中。我需要输出来自第33行第3行和第224行第7列,输出到第二个文件中的单行。我可以为其中任何一个做到这一点,但无法让它为两者工作。例如:

while read i; do 
    /usr/openv/netbackup/bin/admincmd/bpgetconfig -M $i |\
        awk -v j=33 -v k=3 'FNR == j {print $k}' > /tmp/clientversion.txt
done < /tmp/clientlist.txt

非常感谢任何提示或帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

awk 'NR==33{a=$3}NR==224{print a,$7}'

这会将第33行的第三列中的值保存到变量a,然后将其与第224行的第七列一起打印出来。

但是,您当前正在覆盖/tmp/clientversion.txt循环的每次迭代的文件while。假设您希望文件在循环运行后包含所有输出,您应该将重定向移到循环之外:

while read -r i; do
    /usr/openv/netbackup/bin/admincmd/bpgetconfig -M $i |\
        awk 'NR==33{a=$3}NR==224{print a,$7}'
done < /tmp/clientlist.txt > /tmp/clientversion.txt

作为奖励,我已将-r切换添加到read(请参阅related discussion here)。根据输入文件的内容,您可能还希望在"$i"周围使用双引号。