指定された行に基づいて2つのファイルをマージします。

指定された行に基づいて2つのファイルをマージします。

私は持っていますファイル1.txt次のようになります。

search
http://google.com
mail
https://gmail.com

ファイル2.txt次のようになります。

This is a search tool
This is your mail account

このようにマージする必要がありますファイル1.txt次のようになります。

This is a search tool
http://google.com
This is your mail account
https://gmail.com

答え1

また試み

awk '
NR == FNR   {T[$0]
             next
            }
            {for (t in T) if (t ~ $1) $1 = t
            }
1
' file2 file1
This is a search tool
http://google.com
This is your mail account
https://gmail.com

答え2

使用awk:

awk 'NR==FNR{ (NR%2? keyword=$0: seen[keyword]=$0 ); next}  
     { for (keys in seen)if ($0 ~ keys) {print $0, seen[keys] }
}' OFS='\n' file1  file2

出力は次のとおりです

This is a search tool
http://google.com
This is your mail account
https://gmail.com

説明する:

最初のファイルNR==FNRで、レコード/行番号が行NR%2全体$0をelseという変数に格納する場合は、その行を見つけたキーをindexとして使用して名前付き連想配列に追加し、keywordその行を読み込みます。seennext

...最初のファイルが続く場合は、for-loop配列を繰り返します。ボン変数はkeys配列のインデックス要素を指すために使用され、要素がkeysその行で一致できることを確認し、file2そのprint $0キー値をseen[keys]ewlineで区切ります\n

関連情報