awk 单独打印文件中的每一行

ben*_*lev 2 dns awk ansible

我正在制作一个脚本,该脚本获取区域记录和值列表并将其放入 DNS 服务器。所需输出的格式仅适用于 ansible,问题是我无法使用 awk 在每一行上单独操作。它的作用是当我不提及 a 时,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
Run Code Online (Sandbox Code Playgroud)

$file

ansible ben.com 10.0.0.10
test ben.com 10.0.0.110
example ben.com 10.0.0.120
Run Code Online (Sandbox Code Playgroud)

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' }
Run Code Online (Sandbox Code Playgroud)

Output i get:

ben.com:



Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

您可以为此使用此单曲awk

read -p "File: " file
awk '{printf "\t- { zone: \047%s\047, record: \047%s\047, value: \047%s\047 }\n", $2, $1, $3 > $2}' "$file"
cat 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' }```
Run Code Online (Sandbox Code Playgroud)