在Linux中使用awk命令中的tr命令

Alo*_*ark 1 linux bash awk

我想用我的值做一些算术运算.这是我的日志文件:

SYSAUX                                1050        3,04        55       996         5        95
UNDOTBS1                               420         ,08       395        25        94         6
USERS                                    5         ,01         1         4        19        81
SYSTEM                                 730        2,22         3       727         0       100
EXAMPLE                                346         ,95        36       310        10        90
UNDOTBS2                                50         ,04        38        12        77        23
Run Code Online (Sandbox Code Playgroud)

我试图将第三和第四列相乘.为了做到这一点,我必须将","(逗号)改为"."(句号).我试图在tr里面运行命令,awk但它给出了一些错误:

cat mylog.log |awk '{mul= $3 * ${4}|tr  "," "\\."; print mul}'


awk: {mul= $3 * ${4}|tr  "," "\\."; print mul}
awk:             ^ syntax error
awk: {mul= $3 * ${4}|tr  "," "\\."; print mul}
awk:                ^ syntax error
awk: cmd. line:1: {mul= $3 * ${4}|tr  "," "\\."; print mul}
awk: cmd. line:1:                                          ^ unexpected newline or end of string
Run Code Online (Sandbox Code Playgroud)

小智 7

正确的方法是使用正确的语言环境:

LANG=de_DE awk -P '$0 = $3 * $4'
Run Code Online (Sandbox Code Playgroud)

结果

167,2
31,6
0,01
6,66
34,2
1,52
Run Code Online (Sandbox Code Playgroud)

awk减少了系统依赖性


Jos*_*lly 5

您可以tr在传递到之前运行转换awk:

<mylog.log tr ',' '.' | awk '{print $3*$4}'
Run Code Online (Sandbox Code Playgroud)

要仅执行此操作awk,您可以使用sub:

awk '{sub(/,/, "." ,$3); print $3*$4}' mylog.log
Run Code Online (Sandbox Code Playgroud)