ファイルで選択した行の先頭に「#」を追加します。

ファイルで選択した行の先頭に「#」を追加します。

要件:ファイルBのgrepであるファイルAの各行の先頭に何か(例:#)を追加します。

ファイルA

abcd
abdc
sdfg
asdfa
jon
ram

文書B

jon
abcd

ファイルAからファイルBをgrepし、ファイルAの先頭に「#」文字を追加します。

出力は

#abcd
abdc
sdfg
asdfa
#jon
ram

答え1

一方通行:

awk 'NR==FNR{a[$0];next}$0 in a{printf "#";}1'  fileB fileA

説明する:

NR==FNR{a[$0];next} => awkはfileBを配列として読み込みます。

$0 in a{printf "#";}=> fileAの行のいずれかが配列の内容と一致する場合は、先頭に#を追加します。

1=> fileAの各行を印刷します。

sedを使用してください:

$ x=$(sed -e :a -e 'N;s/\n/\\|/;ta' FileB)
$ sed "s/$x/#&/" FileA

最初の sed コマンドは、すべての行が文字列として一緒に連結され、「|」で区切られた文字列を準備します。 $xに保存されます。 2番目のsedは、$ x変数に格納されているパターンと一致する行の先頭に#を挿入します。

答え2

次の oneliner を使用してこれを行うことができます。

sed "$(for str in $(cat fileB); do echo -n "s/$str/#\0/; "; done;)" fileA

コマンドsedはfileBを繰り返してサブシェルに設定されます。次に、#一致する行をaと一致する行に置き換えます。

関連情報