2017-10-03 22 views
1

gawkを使っていくつかの値を取得しますが、ファイルからすべての値を取得するわけではありません。私は特定の部分を置き換えるために私がつかむそれらの値に固有のファイルを生成するために使用するテンプレートである別のファイルがあります。私はsedを使用してテンプレートにあるこれらの関心領域を置き換えたいと思っています。1つのファイル(awk経由)から値を取得し、別のファイル(sed経由)で使用する

the dog NAME , likes to ACTION in water when he's bored 

別のファイル、f1は、犬の名前と

Maxs,swim 
    StoneCold,digs 
    Thor,leaps 

だから私は連想配列にこれらの値を取得し、それらを格納することができ、アクションを持っているでしょう...私はカント何を、または参照してください、私はどのように私のsedスクリプトにこれらを取得するのですか? そう簡単なsedスクリプトがそうテンプレートに入れて、私のうちは、私はbashのファイルを実行したのであれば、コマンドは次のようになります

the dog Maxs , likes to swim in water when he's bored 

こと、またはだろうこの

s/NAME/ value from f1 
s/ACTION/ value from f1 

ようなことができ私が試みたこと

gawk -f f1 animalNameAction | sed -f (is there a way to put something here) template | cat 

     gawk -f f1 animalNameAction > PulledValues| sed -f PulledValues template | cat 

しかし、これはうまくいきませんでした。だから私はこれがどうやってできるのか不思議に思った。

答えて

2

あなたは、awk自体を使用して、これを行うことができますので、FNR==NR{}ブロックで、私はt変数にファイル全体(テンプレート)の内容を保存し

  • 私は、テンプレートは複数行の文字にすることができると仮定し

  • 他のブロックでは、NAMEACTIONをコンマ区切りファイルの第1フィールドと第2フィールドに置き換えました。ここで

は一例です:良い

$ cat template 
the dog NAME , likes to ACTION in water when he's bored 

$ cat file 
Maxs,swim 
StoneCold,digs 
Thor,leaps 

$ awk 'FNR==NR{ t = (t ? t RS :"") $0; next}{ s=t; gsub(/NAME/,$1,s); gsub(/ACTION/,$2,s); print s}' template FS=',' file 
the dog Maxs , likes to swim in water when he's bored 
the dog StoneCold , likes to digs in water when he's bored 
the dog Thor , likes to leaps in water when he's bored 

読み取り可能:

awk 'FNR==NR{ 
       t = (t ? t RS :"") $0; 
       next 
    } 
    { 
     s=t; 
     gsub(/NAME/,$1,s); 
     gsub(/ACTION/,$2,s); 
     print s 
    } 
    ' template FS=',' file 
0

あなたは、私は言葉のNAMEを見つける必要がありますどのように思っていた

ような何かをしたいですとACTIOテンプレート内のNを使用して、それらに多少の印を付けるべきだと考えました。どのようにについて:

s/^([^,]*),(.*)/the dog \1, likes to \2 in water when he's bored/ 

今、あなたは

sed -rf template f1 
を使用することができます
関連する問題