2016-07-28 7 views
0

ファイルAとファイルBの2つのファイルがあります。ファイルAの特定の行には、ファイルBの一部の行の部分文字列が含まれています。ファイルBのファイルAの特定の行の部分文字列をファイルBの文字列で置換する

@Name_1 
foobar 
info_for_foobar 
evenmoreinfo_for_foobar 
@Name_2 
foobar2 
info_for_foobar2 
evenmoreinfo_for_foobar2 

例:ファイルAの

例ファイルBに対応する文字列とこれらのサブストリングを置換

@Name_1_Date_Place 
@Name_2_Date_Place 

私はたい所望の出力:

私はこれまで持って
@Name_1_Date_Place 
foobar 
info_for_foobar 
evenmoreinfo_for_foobar 
@Name_2_Date_Place 
foobar2 
info_for_foobar2 
evenmoreinfo_for_foobar2 

:私は通過しますここで、whileループを使用することを考えていたので、ファイルAのものに対応したファイルB内の名前の順番を得ることができた

ファイルBのすべての行を検索し、ファイルAの対応する部分文字列を見つけてその行に置き換えますが、これをbashスクリプトに入れる方法がわかりません。

所望の出力を与えるされていない、私はそう遠い持っているコードが、:

grep '@' fileA.txt > fileAname.txt 

while read line 
do 
replace="$(grep '$line' fileB.txt)" 
sed -i 's/'"$line"'/'"$replace"'/g' fileA.txt 
done < fileAname.txt 

誰もが考えているの?

ありがとうございます!

+2

をあなたがしてサポートをご希望の任意のコードを持っていますか、またはあなたが求めています未払いのプログラミング作業ですか? – ghoti

+0

謝罪、私は他の人々が私のためにすべての仕事をすることを望んでいなかった、私は自分の投稿を編集し、これまで持っていたコードを含めた。 – Woerrie

答えて

0

このスクリプトでそれを行うことができます。

awk 'NR==FNR {str[i]=$0;i++;next;} $1~"^@" {for (i in str) {if(match(str[i],$1)){print str[i];next;}}} {print $0}' B.txt A.txt 
+0

ありがとう、これはトリックを行ったようです! – Woerrie

+0

番号付けされた配列とanubhavaのような連想配列の利点は何ですか? – ghoti

+0

@ghotiプログラミングやスクリプティングにあまり使われていない人にとっては分かりません。私はいくつかのプログラミング言語が文字列をベクトルポインタとして受け入れると思っています – AwkMan

0

このawkがあなたのために働く必要があります。

awk 'FNR==NR{a[$0]; next} {for (i in a) if (index(i, $0)) $0=i} 1' fileB fileA 

@Name_1_Date_Place 
foobar 
info_for_foobar 
evenmoreinfo_for_foobar 
@Name_2_Date_Place 
foobar2 
info_for_foobar2 
evenmoreinfo_for_foobar2 
関連する問題