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

Awk printing each line in file seperatly

我正在制作一个脚本,它获取区域记录和值的列表并将其放入 DNS 服务器中。 所需输出的格式仅适用于 ansible,问题是我无法使用 awk 分别对每一行进行操作。 它的作用是当我没有提到 NR 时,它会在同一行中打印所有项目。 当我提到 NR 时,它不打印任何内容或仅打印指定的 NR(即只有当我执行 NR==1 时,它才会打印第一行) 我的 objective 是遍历所有行并以我想要的格式打印它们,并在行尾后换行。

bash_script

#! /bin/bash

read -p "File: " file
zone=`awk 'NR==1 { print }' ${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" "\x27, record: \x27" "\x27, value: \x27" "\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:



你可以用这个 awk 来做这个:

read -p "File: " file
awk '{printf "\t- { zone: 7%s7, record: 7%s7, value: 7%s7 }\n", , ,  > }' "$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' }```

使用您显示的示例,请尝试以下解决方案。这是一个通用解决方案,在此基础上,您可以在此程序的 split 部分下的 BEGIN 部分中提供一些列名,但这是考虑到您要添加字符串(例如:区域, 记录等) 在每个 field/column 值之前。如果您的字符串数量少于 Input_file 中的 fields/columns 数量,那么您也可以根据需要从 i<=NF 更改条件,以获取您想要获得的列数。

read -p "File: " file
awk -v s1='7' 'BEGIN{OFS=", ";split("zone:,record:,value:",headings,",")} {for(i=1;i<=NF;i++){$i=headings[i]" " s1 $i s1};[=10=]="  - { " [=10=]" }"} 1' "$file"

在这里添加一个非线性形式的解决方案:

awk -v s1="'" '
BEGIN{
  OFS=", "
  split("zone:,record:,value:",headings,",")
}
{
  for(i=1;i<=NF;i++){
    $i=headings[i]" " s1 $i s1
  }
  [=11=]="  - { " [=11=]" }"
}
1
' "$file"