我的输入文件是这样的:
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
对于 GNU awk,您需要将POSIXLY_CORRECT
环境变量和 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
您还可以使用gawk --posix
或gawk --use-lc-numeric
代替 POSIXLY_CORRECT 环境变量。
答案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=';'
设置氧输出F产量S运算符到;