원본 부호에 관계없이 선택한 라인에 음수 값을 출력합니다.

원본 부호에 관계없이 선택한 라인에 음수 값을 출력합니다.

ASCII 파일 "text.dat"의 특정 줄을 읽으려면 다음 코드를 사용하고 있습니다.

sed -n '/Columnaxis/p' text.dat

출력은 다음과 같습니다

Columnaxis: 100

이전 줄의 두 번째 부분만 출력하기 위해 이전 명령줄에 다음을 추가했습니다.

 sed -n '/Columnaxis/p' text.dat | awk '{ print $2 }'

마지막 명령의 출력은 "100"입니다.

숫자의 원래 부호에 관계없이 음수를 출력하도록 마지막 코드를 어떻게 업데이트할 수 있습니까? (즉, 입력이 "+100"이면 코드에서 "-100"을 출력하고 싶고 입력이 "-100"이면 코드에서 "-100"을 출력하고 싶습니다.

추신. text.dat의 내용은 다음과 같습니다.

Columnaxis: 100
Columnaxis_1: 100
Columnaxis_2: -100
Columnaxis_3: 50
Columnaxis_4: -2.3
Columnaxis_5: 1.2
Columnaxis_6: -5
Columnaxis_7: -2
Columnaxis_8: -4
Columnaxis_9: -2

코드에서 다음을 출력하고 싶습니다.

Columnaxis: -100

입력에 "Columnaxis: +100"이 있다고 가정하면

Columnaxis: -100

답변1

아니면 awk혼자:

$ cat text.dat
Columnaxis: 100
Columnaxis: +100
Columnaxis: -100

$ awk '/Columnaxis/ { gsub("-|+", "", $2); print "-"$2 }' text.dat
-100
-100
-100

답변2

이를 위해 문자열 연산 대신 산술 연산을 사용할 수 있습니다.

awk '
    function neg(x) {if (x<0) return x; else return -x}
    /Columnaxis/ {print neg($2)}
' file

"100", "+100" 또는 "-100"과 같은 값에 적용됩니다.

답변3

sed다음 명령만 사용하여 이 작업을 수행 할 수 있습니다 .

sed -nE 's/^Columnaxis:[[:blank:]]+-?([0-9]+)$/-\1/p' file.txt

예:

$ cat file.txt
Columnaxis: 100
Columnaxis: -100
asdklasjds

$ sed -nE 's/^Columnaxis:[[:blank:]]+-?([0-9]+)$/-\1/p' file.txt
-100
-100

답변4

sed를 사용하고 정규 표현식으로 바꿀 수 있습니다: sed -E 's/[+-]?([0-9]+)$/-\1/g'

cat text.dat 
Columnaxis: 100
Columnaxis: +100
Columnaxis: -100

sed -E 's/[+-]?([0-9]+)$/-\1/g' text.dat 
Columnaxis: -100
Columnaxis: -100
Columnaxis: -100

관련 정보