내 입력 파일은 다음과 같습니다.
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_CORRECT
GNU 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=';'
설정산소산출에프생산하다에스연산자;