sed 또는 awk를 사용하여 음수 형식 변경

sed 또는 awk를 사용하여 음수 형식 변경

다음과 같은 형식을 제외하고 일부 음수가 포함된 텍스트 파일이 있습니다.

00000012-

숫자 뒤에 하이픈이 있습니다.

awk를 사용하여 파일을 SQL 삽입 명령으로 다시 형식화하기 위해 파일을 처리하고 있는데 숫자 뒤에 음수 기호가 나타나기 때문에 SQL 해석기가 숫자를 질식시킵니다.

숫자 앞에 음수 기호를 이동할 수 있는 정규식이 있나요?

답변1

와 함께 sed:

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

을 제공합니다 -00000012.

즉, 첫 번째 그룹은 숫자로, 두 번째 그룹은 부호로 두 그룹을 일치시키되, 0개 이상의 일치 항목을 사용합니다.저것, 그런 다음 두 개를 교환하여 교체합니다.

답변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 }'

참고: gensub()기능을 위해서는 GNU awk가 필요합니다. 캡처 그룹도 지원하지 sub()않습니다 .gsub()

펄을 사용하면:

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

관련 정보