我正在使用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
非常感谢任何提示或帮助!
答案 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"
周围使用双引号。