某些命令输出是:
192.168.0.1 value1
192.168.0.2 value2
192.168.0.3 value3
192.168.0.4 value4
我需要将它传递给awk并用主机名替换IP,我已经开始使用它了。使用下一个命令:
$ knife search node -i public_ipv4:192.168.0.1
server1
所以我需要将$ 1列的cmd输出值分配给$ ip变量并将其传递给knod cmd,因为 ip = $ 1 :
$ cmd |awk -v ip=$1 -v name="$(knife search node -i public_ipv4:$ip)" '{$1=name}1'
期待输出:
server1 value1
server2 value2
server3 value3
server4 value4
我该怎么做?
答案 0 :(得分:4)
使用read
和process substitution在shell中处理它会更容易:
while read -r ip val; do
echo "$(knife search node -i public_ipv4:$ip) $val"
done < <(cmd)
在awk
命令-v ip=$1
中无法正常工作,因为$1
是动态awk值,它将针对每一行更改,并且无法使用-v name=value
参数使用。
答案 1 :(得分:1)
您可以使用awk
&#39; getline
功能:
command | awk '{"knife search node -i public_ipv4:"$1 | getline h; print h, $2}'
上述命令执行knife
命令并将其输出读入变量h
。