我有一个脚本test.sh
#!/bin/bash
route add -net <IP1> netmask 0.0.0.0 gw 10.xx.xx.1 dev eth0
route add -net <IP2> netmask 0.0.0.0 gw 10.xx.xx.1 dev eth0
我在另一个脚本中创建了一个函数get_alias,该函数获取对应于IP地址的别名值。
我想将对应ip的get_alias命令输出附加到test.sh的每一行(最顶部除外)
所以假设
$(get_alias IP1)为1,$(get_alias IP2)为2
所以我想要的文件应该如下:
#!/bin/bash
route add -net <IP1> netmask 0.0.0.0 gw 10.xx.xx.1 dev eth0:1
route add -net <IP2> netmask 0.0.0.0 gw 10.xx.xx.1 dev eth0:2
我在awk以下尝试过,但这不起作用
awk '{ print $0":"$(get_alias "$4") }' test.sh
答案 0 :(得分:2)
我使用awk代替awk解决了该问题:
while read -r line ; do
ip=$(echo $line | cut -d " " -f 4)
alias="$(get_alias "$ip")"
echo "$line:$alias"
done < test.sh > test_out.sh
答案 1 :(得分:1)
慢速bash循环:
(
# ignore first line
IFS= read -r line;
printf "%s\n" "$line";
# for the rest of the lines
while IFS= read -r line; do
# get the ip address
IFS=$' \t' read _ _ _ ip _ <<<"$line"
# output the line with `:` with the output of get_alias:
printf "%s:%s\n" "$line" "$(get_alias "$ip")"
done
) < test.sh
脚本实际上是:
-读取第一行并将其输出而不进行更改
-然后从文件中读取行
-我们从该行获得的IP地址为4字段(awk '{print $4}'
和类似的地址也可以使用)
-然后我们使用get_alias
函数的输出来打印行。