BashまたはPythonでforループを使用してファイルの違いを見つける

BashまたはPythonでforループを使用してファイルの違いを見つける

AnsibleホストファイルにLinuxシステムを追加するために自動化スクリプトを使用しようとしています。自動化されたプロセスは次のとおりです。

  1. LinuxVms.txtAnsibleマシンは、Vmwareサーバーの1つから名前付きLinux仮想マシンのリストを取得します。

  2. 以下のようにシェルスクリプトを開発しました。ファイル[all_linux_host]のサーバーを LinuxVms.txtタグに追加します。このスクリプトは、単一の操作で使用される場合に機能します。

このプロセスが終わった後、私がやりたいことは次のとおりです。

  • VMチームは自動的にLinuxVm.txtリストをansibleサーバーに送信し、ファイルに新しいIPアドレスがある場合は、このIPアドレスをタグの下のLinuxVm.txtansibleホストファイルに追加する必要があります。[all_linux_host]

for私はループがこれのために働くべきだと思います。ループは、ansibleホストファイルのすべてのタグではなく、for新しく到着したLinuxVm.txtファイルとタグを制御する必要があります。[all_linux_host]ファイルとタグの間に違いがある場合は、その違いを見つけてタグに追加する必要があります[all_linux_host]

例えば

  • LinuxVms.txt
    1.1.1.1       
    2.2.2.2           
    3.3.3.3   
    12.12.12.12
    
  • 現在のAnsibleホストファイル/etc/ansible/hosts
    [test]  
    8.8.8.8         
    12.12.12.12   
    13.13.13.13
    
    [all_linux_hosts]
    1.1.1.1     
    2.2.2.2
    
    これは[all_linux_hosts]ansibleホストファイルの最後のセクションです。
  • forループの後、Ansibleホストファイルは次のようになります。
    [test]  
    8.8.8.8         
    12.12.12.12   
    13.13.13.13
    
    [all_linux_hosts]
    1.1.1.1       
    2.2.2.2           
    3.3.3.3   
    12.12.12.12
    
    IP アドレスの順序は重要ではありません。

ループの開発に役立ちますかfor


ワンタイム作業のためにこの部分を考慮する必要はありません。

#!/bin/bash
sudo cp /home/vmteam/LinuxVMs.txt /home/xxx
sudo chown xxx: /home/vmteam/LinuxVMs.txt
sudo dos2unix /home/xxx/LinuxVMs.txt
awk '{print $1}' /home/xxx/LinuxVMs.txt >> ansible_host_file  ##file correction
awk '{print $2}' /home/xxx/LinuxVMs.txt >> ansible_host_file  ##file correction
sed -i 's/PublicIp//g'    /home/xxx/ansible_host_file
sed -i 's/-//g' /home/xxx/ansible_host_file
sed -i '/^\s*$/d' /home/xxx/ansible_host_file
sed -i 's/IpAddress1/ /g' /home/xxx/ansible_host_file
sed -i '/^\s*$/d' /home/xxx/ansible_host_file``` 

ベストアンサー1

a[".."]vmsファイルに記載されているLinuxホストにタイプの連想配列を入力します。その後、ansibleファイルに表示されているホストを確認し、最後の残りのコンテンツを印刷します。

awk '
  NR==FNR {a[$1];next}

  $1=="[all_linux_hosts]",0 {
    if ( $1 in a ) delete a[$1]
  };1

  END {
    for (host in a) print host
  }
' LinuxVms.txt /etc/ansible/hosts
[test]  
8.8.8.8         
12.12.12.12   
13.13.13.13

[all_linux_hosts]
1.1.1.1     
2.2.2.2
12.12.12.12
3.3.3.3

おすすめ記事