私のLinuxボックスには非常に大きなホストファイルがあります。
1.1.1.1 hostA hosta
1.1.1.2 hostB hostb
1.1.1.3 hostC hostc
1.1.1.4 hostD hostd
1.1.1.5 hostE hoste
1.1.1.6 hostF hostf
1.1.1.7 hostG hostg
.......
修正したい行がありますfile2
。
2.1.1.1 hostA hosta
2.1.1.2 hostB hostb
2.1.1.3 hostC hostc
したがって、希望の出力は次のようになります。
2.1.1.1 hostA hosta
2.1.1.2 hostB hostb
2.1.1.3 hostC hostc
1.1.1.4 hostD hostd
1.1.1.5 hostE hoste
1.1.1.6 hostF hostf
1.1.1.7 hostG hostg
.......
私はこれを次のように使用する方法を知っています。
sed '/hostA/ s/1.1.1.1/2.1.1.1/' hosts
for
しかし、ループで使用する方法がわかりません。それともホストを修正する別のクイック方法はありますか?
ベストアンサー1
以下が使用されますミラー(mlr
)は、ファイルをヘッダーなしで「きれいに印刷された」データとして読み取り、各行の2番目と3番目のフィールドを結合キーとして使用して、ファイル間hosts
の左結合操作を実行します。new
$ mlr --pprint -N join -j 2,3 -f hosts --ul then reorder -f 1,2,3 new
2.1.1.1 hostA hosta
2.1.1.2 hostB hostb
2.1.1.3 hostC hostc
1.1.1.4 hostD hostd
1.1.1.5 hostE hoste
1.1.1.6 hostF hostf
1.1.1.7 hostG hostg
reorder
最後の操作は、入力で見つかったのと同じ順序でフィールドを並べ替えます(そうでない場合は、最後の2つのフィールドが部分データのフィールド1と2として使用されます)。