ファイルAとファイルBがあります。存在するファイルA、私のスクリプトが特定のstringAを見つけることができるようにしたいです。次に、sed
コマンドを使用してstringAの一部のみを貼り付けます。文書B(特定のstringBの一部に置き換えられました文書B)。
例えば。
ファイルA アジジカ・ハステッド アシジック・ダジド 推奨重量:0.546(関心文字列です)
文書B アスダギスクダ クザッシュ・ザフステッド ワーキンググループHT 0.495(FILE BIの交換が必要な部分です)
stringA(0.546)のテキストを選択し、fileBの0.495を0.546に置き換えたいので、新しいfileBは次のようになります。
新しいファイルB アスダギスクダ クザッシュ・ザフステッド 重量0.546
sed
私は同じファイル内のstringAをstringBに置き換えますが、私のstringsAとBが異なるファイルにあるので、使用するのは私には適していません。また、「ランダムに」(プログラミング方式で)生成されます。
答え1
sed
(および最初のファイルと一致する他のツール)を使用して実際にこれを行うことができます。たとえば、
$ sed -E "s/(WGHT\s*).*/\1$(grep -oP 'Recommended Weight: \K[0-9.]+' fileA)/" fileB
asdajskdha
kjashdjahsd
WGHT 0.546
または、まず変数に保存します。
$ wght=$(sed -En 's/Recommended Weight: *([0-9.]+)/\1/p' fileA)
$ sed -E "s/(WGHT\s*).*/\1$wght/" fileB
asdajskdha
kjashdjahsd
WGHT 0.546
答え2
awk 'FNR==NR && $2 == "Weight:"{ weights[spotted++]=$3} FNR!=NR && $1 != "WGHT" { print } FNR!=NR && $1=="WGHT" { print "WGHT", weights[replaced++]} ' in1 in2 > out2
out2
これにより、目的の出力データを含む新しいファイルが作成されます。その後、好きな場所に移動できます。
$ cat out2
asdajskdha
kjashdjahsd
WGHT 0.546
答え3
このスクリプトはnew_file_b.txt
。
使用法: ./script.sh file_a.txt file_b.txt > new_file_b.txt
#!/bin/bash
awk '
/Recommended Weight: /{
value=$3;
}
NR != FNR {
if($1 == "WGHT") {
print $1 OFS value;
} else {
print;
}
}
' "$1" "$2"
答え4
GNU sed
次のように進むことができます。
sed -Ez '
N;s/.*\nRecommended Weight: (\S+)\n.*\x00(.*\nWGHT[[:blank:]]+)\S+\n/\2\1\n/
' fileA fileB
-E
オンの場合、extended regex facility
この-z
オプションは各ファイルを単一の文字列として扱い、複数のファイルを\0
null()で区切ります。