txt ファイルのコンテンツ列をカスタム文字列に置き換えます。

txt ファイルのコンテンツ列をカスタム文字列に置き換えます。

以下のtxtファイルの3番目の列の内容をカスタムテキストに置き換えようとしています。つまり、GCM下の3番目の列の内容の代わりです。Example1、、Example2...、などのカスタムテキストが必要ですExampleN。これらの代替文字列は他のテキストファイルから提供されます。

odu-encryption-2/1/5/odu4-1             enabled            GCM                ^M^M
odu-encryption-2/1/6/odu4-1             enabled            GCM                ^M^M
odu-encryption-2/1/7/odu4-1             enabled            GCM                ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1     enabled            GCM                ^M^M

ファイルはスペースで区切られます。最後の列は^M^Mルータの標準出力です。

予想出力 -

odu-encryption-2/1/5/odu4-1             enabled            John1                ^M^M
odu-encryption-2/1/6/odu4-1             enabled            Mike2                ^M^M
odu-encryption-2/1/7/odu4-1             enabled            Tom33                ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1     enabled            WolfN               ^M^M

Bashでこれを行う方法を知っている人はいますか?sed '3s/$/ Ccustom text/' testing.txt3行目をカスタムテキストに置き換えることができるかどうかを調べるためにを使用してみましたが、その中の既存のテキストが変わりました。

答え1

他のファイルに次のように1行に1つの文字列がある場合:

$ cat file2
John1
Mike2
Tom33
WolfN

見つかった順序で追加するには、次の手順を実行します。

$ awk 'NR == FNR{a[NR]=$1;next}; {$(NF-1)=a[FNR]; }1' file2 file1
odu-encryption-2/1/5/odu4-1 enabled John1 ^M^M
odu-encryption-2/1/6/odu4-1 enabled Mike2 ^M^M
odu-encryption-2/1/7/odu4-1 enabled Tom33 ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1 enabled WolfN ^M^M

ただし、これは連続したスペースを縮小します。これが問題なら、次のようにすることができます。

$ cat file1 | perl -lape 'BEGIN{open($fh,"file2"); while(<$fh>){chomp; $a[$.]=$_}} s/$F[2]/$a[$.]/ ' 
odu-encryption-2/1/5/odu4-1             enabled            John1                ^M^M
odu-encryption-2/1/6/odu4-1             enabled            Mike2                ^M^M
odu-encryption-2/1/7/odu4-1             enabled            Tom33                ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1     enabled            WolfN                ^M^M

関連情報