sed または awk を使用して負の書式を再指定します。

sed または awk を使用して負の書式を再指定します。

次の形式を除いて、いくつかの負の数を含むテキストファイルがあります。

00000012-

数字の後にはハイフンが続きます。

awkを使用してファイルを処理し、SQL挿入コマンドで再フォーマットしていますが、数値の後にマイナス記号が表示されるため、SQLソルバーは数値を窒息させます。

数字の前に負の記号を移動する正規表現はありますか?

答え1

そしてsed

echo 00000012- |  sed -e 's/\([0-9]+\)\(-\)\?/\2\1/'

与えられた-00000012

つまり、2 つのセットを一致させます。最初のものは数字で、2番目は記号で一致しますが、0個以上の一致を使用します。それを選択し、2つを交換します。

答え2

代わりにSQLを使用して問題を解決してください。

create table #Tempt (Value VarChar(100))

Insert Into #Tempt Values(NULL)
Insert Into #Tempt Values('500.1-')
Insert Into #Tempt Values('-500.1')
Insert Into #Tempt Values('20.5')


select *, case when Value like '%-' then '-' + replace(value,'-',') else value end
 From   #Tempt

次に、一括挿入を使用して#Tempt物理テーブルから値を取得します。


からインポート負の値を一括挿入

なぜ人々は常にプログラマーがこの愚かなことを整理することを期待していますか?

あなたは唯一の人ではありません...

答え3

sedを使用してください:

sed -e 's/\<\([0-9.]\+\)-/-\1/g'

または

sed -E -e 's/\<([0-9+]+)-/-\1/g'

GNU awkを使う:

awk '{$0=gensub(/\<([0-9.]+)-/,"-\\1","g"); print }'

注:実行するにはGNU awkが必要ですgensub()。グループキャプチャもsub()サポートされていません。gsub()

パールの使用:

perl -p -e 's/\b([\d.]+)-/-$1/g'

関連情報