
次の形式を除いて、いくつかの負の数を含むテキストファイルがあります。
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'