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