私のテーブルにデータがあります。列の一部のインデックス(1〜23の数字)を3〜4桁のサンプル番号(2347、3856など)に置き換える必要があります。
したがって、元の列は次のようになります。
SF=1,2
SF=12,7
SF=17,4
出力は次のようになります。
SF=2347,3856
SF=8553,9539
...
問題は:1つのサンプル(1-> 2720)に対してこれを実行してもかまいませんが、2を別のものに置き換えると混乱が発生し、数値を変更するように指定する方法がわかりません。ただ(2)数字ですか? 2つ以上の連続した数字がある可能性があります。
混乱して聞いたらすみません。私は初心者です。
直す。ありがとうマジック私は部分的に成功しました。ただし、何らかの理由で行の最初の置換後に新しい行が作成され、次の数字は明らかに置き換えられません。だから私が得るものは次のとおりです。
SF=2347
,2
SF=8553
,7
コードは次のとおりです。
'sed "s/=${index},/=${sample},/g; s/,${index} /,${sample} /g; s/,${index},/,${sample },/g" サンプル.txt'
なぜこれが起こるのですか?
答え1
私考える、次の操作を実行しようとしています。
$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g' sedtest.txt
SF=2347,2
SF=3856,15
SF=17,4
パターンと置換文字列にリテラル「=」と「、」を含めると、「= 1」と「= 12」を区別できます。
修正する:
変える両方sed の変数は $ を使用して行末を一致させることができます。
$ sed 's/=1,/=2347,/g; s/=12,/=3856,/g; s/,2$/,2342/g; s/,15$/,234325/g' sedtest.txt
SF=2347,2342
SF=3856,234325
SF=17,4
${var}のようなbash変数を混ぜると奇妙に見えますが、二重引用符を使うとうまくいきます。
例えば、
$ a=42
$ sed "s/=1,/=2347,/g; s/=12,/=${a},/g; s/,2$/,2342/g; s/,15$/,234325/g" sedtest.txt
SF=2347,2342
SF=42,234325
SF=17,4
ところで、代替項目が大きい場合は、sedのファイルを使用してすべてをクリーンアップできます。例えば、
$ cat ./datascript.sed
# Sed script to do stuff
s/=1,/=2347,/g
s/=12,/=2342,/g
s/,2$/,2342/g
s/,15$/,234325/g
次に、データに対してファイルを実行します。
$ sed -f datascript.sed sedtest.txt
SF=2347,2342
SF=2342,234325
SF=17,4
このファイルの欠点は、変数の使用方法がわからないことです。