【发布时间】:2021-06-30 22:47:18
【问题描述】:
我正在制作一个脚本,它获取区域记录和值的列表并将其放入 DNS 服务器。
所需输出的格式仅用于 ansible,问题是我无法使用 awk 单独对每一行进行操作。
它的作用是当我没有提到NR 时,它会在同一行中打印所有项目。
当我提到NR 时,它不打印任何内容或仅打印指定的 NR(即仅当我执行 NR==1 时才会打印第一行)
我的目标是迭代所有行并以我想要的格式在行尾后用换行符打印它们。
bash_script
#! /bin/bash
read -p "File: " file
zone=`awk 'NR==1 { print $2}' ${file}`
echo "${zone}:" >> /etc/ansible/roles/create_dns/defaults/main/${zone}.yml
lines=`wc -l < ${file}`
for line_num in $(seq 1 $lines)
do
echo $line_num
echo `awk 'NR==$line_num {print " - { zone: \x27" $2"\x27, record: \x27" $1"\x27, value: \x27" $3"\x27 }\\n"}' ${file}` >> /etc/ansible/roles/create_dns/defaults/main/${zone}.yml
done
$file
ansible ben.com 10.0.0.10
test ben.com 10.0.0.110
example ben.com 10.0.0.120
Wanted output:
ben.com:
- { zone: 'ben.com', record: 'ansible', value: '10.0.0.10' }
- { zone: 'ben.com', record: 'test', value: '10.0.0.110' }
- { zone: 'ben.com', record: 'example', value: '10.0.0.120' }
Output i get:
ben.com:
【问题讨论】:
-
您应该将您的 shell 脚本复制/粘贴到 shellcheck.net 并修复它告诉您的错误。
-
关于 awk 脚本中的
\x27- 请改用\047,有关详细信息,请参阅 awk.freeshell.org/PrintASingleQuote。 -
关于 awk 脚本中的
$line_num,请改用-v ...- 请参阅 how-do-i-use-shell-variables-in-an-awk-script