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)でのみ機能し、配列にseen
file1$2
の列#2と同じ文字列が含まれていることを確認し、事前に追加されたfile1の行全体を印刷し、一致する//
までnext
条件を再確認します。それ以外の場合は、次を印刷します。条件を含む行全体1
(これはアクティブ化awk
のデフォルト動作です)。
答え2
次のことができますsed
。
sed '/tmp/!{H;d;}
G;s/$/\
/;s_.*\(..*\).*\n\1\n_// &_
P;d' file2 file1
スケジュールされたスペースでfile2のパターンを収集し、file1の各行のコレクションを追加し、逆参照を使用してその行にパターンが見つかったことを確認します。
詳しくはこちらをご覧くださいこの質問と回答。
この文字列を使用してtmp
file1 にあることを示します。状況に合わせて調整する必要があります。 2行目から始まる奇妙な置換は最後に改行文字を追加するため、各パターンが改行文字で囲まれていることがわかります。