4

2 つのサンプル ファイルがあります。

ファイル1:

Bolek
jeden(wzór1)
Lolek
dwa(wzór2)
trzy(wzór3)

ファイル2:

czerwony
zielony
niebieski

コマンドを試しました:

awk '{while(getline a < "file2"); sub(/wzór1/, a); print }' file1
Bolek
jeden(niebieski)
Lolek
dwa(wzór2)
trzy(wzór3)

wzór1「file2」の内容で「file1」を置き換えたい。印刷したい:

Bolek
jeden(czerwony
zielony
niebieski)
Lolek
dwa(wzór2)
trzy(wzór3)
4

2 に答える 2

6

一方通行:

$ awk -v val="$(<file2)" '{sub(/wzór1/,val);}1' file1
Bolek
jeden(czerwony
zielony
niebieski)
Lolek
dwa(wzór2)
trzy(wzór3)

file2の内容は変数""に読み込まれますcont。この変数はに渡されawk、wzor1のすべての出現が変数contentに置き換えられます。

于 2012-12-19T14:20:30.183 に答える
3
awk 'NR==FNR{r=r s $0; s=ORS; next} {sub(/wzór1/,r)} 1' file2 file1

UNIXを使用していると仮定すると、これまでに投稿された2つのソリューションのアプローチの違いは次のとおりです。「file2」の最後の空の行に注意してください。

$ cat file2
czerwony
zielony
niebieski

$ awk 'NR==FNR{r=r s $0; s=ORS; next} {sub(/wzr1/,r)} 1' file2 file1
Bolek
jeden(czerwony
zielony
niebieski
)                   <--- note the empty line is reproduced
Lolek
dwa(wzr2)
trzy(wzr3)
$ awk -v val="$(<file2)" '{sub(/wzr1/,val);}1' file1
Bolek
jeden(czerwony
zielony
niebieski)          <--- note the empty line has been removed
Lolek
dwa(wzr2)
trzy(wzr3)

UNIXを使用していない場合、シェルソリューションはとにかくN/Aになると思います。

于 2012-12-19T14:31:40.453 に答える