両方のファイルを比較し、一致する場合は入力を修正します。

両方のファイルを比較し、一致する場合は入力を修正します。

file1と比較したいですfile2

file1パス名セットとfile2単語セットを含みます。

パス名に2番目のファイルの単語が含まれている場合は、行の前に追加する必要があります//

file1:

xxx/AAA.tmp.v
xxx/BBB.tmp.v
xxx/CCC.tmp.v

file2:

BBB
CCC
FFF

新しいファイルから希望の出力:

xxx/AAA.tmp.v
// xxx/BBB.tmp.v
// xxx/CCC.tmp.v

答え1

あなたが使用できるawk

awk -F"[/.]" 'NR==FNR{seen[$0];next} 
    ($2 in seen){print "// "$0; next}1
' file2 file1
  • -F"[/.]"フィールド区切り文字をスラッシュ/または点として定義します.
  • NR==FNRこれは、最初の入力データ(ここではfile2)に常に適用されます。エココード窒素数量==Fエリーエココード窒素数字。
  • seen[$0];next上記がtrueの場合、file2の行全体を配列という名前で保存し、seen次の行を読みます。next(実際には最初の行に移動してまでこのブロックを再実行しますNR!=FNR。)
  • ($2 in seen){print "// "$0; next}1これは2番目の入力ファイル(ここではfile1)でのみ機能し、配列にseenfile1$2の列#2と同じ文字列が含まれていることを確認し、事前に追加されたfile1の行全体を印刷し、一致する//までnext条件を再確認します。それ以外の場合は、次を印刷します。条件を含む行全体1(これはアクティブ化awkのデフォルト動作です)。

答え2

次のことができますsed

sed '/tmp/!{H;d;}
G;s/$/\
/;s_.*\(..*\).*\n\1\n_// &_
P;d' file2 file1

スケジュールされたスペースでfile2のパターンを収集し、file1の各行のコレクションを追加し、逆参照を使用してその行にパターンが見つかったことを確認します。

詳しくはこちらをご覧くださいこの質問と回答

この文字列を使用してtmpfile1 にあることを示します。状況に合わせて調整する必要があります。 2行目から始まる奇妙な置換は最後に改行文字を追加するため、各パターンが改行文字で囲まれていることがわかります。

関連情報