다른 열에 쉼표가 있는 값 합계

다른 열에 쉼표가 있는 값 합계

내 입력 파일은 다음과 같습니다.

x;y;z
1;1,2;1
0;0,5;1
0;0,75;2
4;1,5;2
2;3,55;1

awk것은:'{if($1>0){print $1";"$2-$3";"}'

내 예상 결과:

1;0,2;
4;-0,5;
2;2,55;

하지만 내 출력 파일에는 쉼표가 포함된 숫자가 표시되지 않습니다.

답변1

귀하의 지역이 방해가 되고 있습니다. 바라보다https://www.gnu.org/software/gawk/manual/html_node/Locale-influences-conversions.html

POSIXLY_CORRECTGNU awk의 경우 환경 변수와 LS_NUMERIC 환경 변수를 쉼표를 소수 구분 기호로 사용하는 로케일로 설정 해야 합니다 .

POSIXLY_CORRECT=1 LC_ALL=en_DK.utf-8 gawk -F';' '$1+0 > 0 {print $1 FS $2-$3 FS}' file
1;0,2;
4;-0,5;
2;2,55;

$1+0 > 0또한 헤더 인쇄를 피하기 위해 사용합니다 . 당신은 또한 사용할 수 있습니다NR > 1 && $1 > 0


POSIXLY_CORRECT 환경 변수를 사용 gawk --posix하거나 바꿀 수도 있습니다 .gawk --use-lc-numeric

답변2

또는 다음을 수행할 수 있습니다.

awk -F';' '{ gsub(/,/,".", $0); save=$2-$3; gsub(/\./,",", save) }
           NR>1 && $1{print $1, save, ""}' OFS=';' infile
1;0,2;
4;-0,5;
2;2,55;
  • NR>1첫 번째 줄을 건너뜁니다.
  • $1$1 >0거기에는 약어가 사용됩니다.
  • OFS=';'설정산소산출에프생산하다에스연산자;

관련 정보