在 Bash 中将列添加到具有设置间距的文本文件

在 Bash 中将列添加到具有设置间距的文本文件

我正在 DNS 中设置一个恶意软件区域文件,它将所有主机指向特定的 IP。该文件只是一个主机名列表。这就是我现在所拥有的:

googlle.in                               
greensny.com                  
hoefra.at                    
hotel-sas.ru      

这就是我需要的样子:

googlle.in                IN           A          192.168.100.10                      
greensny.com              IN           A          192.168.100.10     
hoefra.at                 IN           A          192.168.100.10   
hotel-sas.ru              IN           A          192.168.100.10 

我能够将一些东西与 sed 组合在一起:

sed -i 's/$/                     IN          A           192.168.155.128/' db.malware-host-only

哪个有效,但它看起来像这样:

vururyuzeifadesi.net   IN          A           192.168.155.128
waseemamrohi.com   IN          A           192.168.155.128
weblab-srv.biz  IN          A           192.168.155.128
weghost.ru   IN          A           192.168.155.128
wnctnr.com   IN          A           192.168.155.128

如何清理它并使列之间的间距相等,以便“IN”从“A”的特定点开始,并且 IP 地址列之间的距离也相等?

答案1

只需将输出通过管道传输到column -t

sed 's/$/ IN A 192.168.155.128/' db.malware-host-only | column -t > tmp
mv tmp db.malware-host-only

您可以使用该-o参数来扩展列之间的空格:

column -t -o '      '

您不能使用sed -i它,因此输出到临时文件,然后将其重命名为原始名称。

答案2

awk '{ printf "%-30s%10s%10s%20s\n",$1,"IN","A","192.168.100.10"; }' file

相关内容