gpt4 book ai didi

Awk 分别打印文件中的每一行

转载 作者:行者123 更新时间:2023-12-05 09:32:18 27 4
gpt4 key购买 nike

我正在制作一个脚本,它获取区域记录和值的列表并将其放入 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

$文件

ansible ben.com 10.0.0.10
test ben.com 10.0.0.110
example ben.com 10.0.0.120

想要的输出:

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' }

我得到的输出:

ben.com:



最佳答案

您可以为此使用单个 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' }```

关于Awk 分别打印文件中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68191022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com