在awk中处理文件中的数据

在awk中处理文件中的数据,awk,Awk,我有一个文件如下 (-0.548,15.994) (1.008,8.91) (-0.19,4.594) (-0.99,9.99) 我曾经 $ awk '{ mul = $1*$2; print mul }' input.txt > output.txt 但是output.txt文件的所有值都是0。 谁能告诉我哪里错了吗?如果你打印$1和$2的值,你就会看到问题所在。您还需要告诉awk使用,作为字段分隔符 这是您的代码的修订版本 awk -F, '{ gsub(/[

我有一个文件如下

  (-0.548,15.994)
  (1.008,8.91)
  (-0.19,4.594)
  (-0.99,9.99)
我曾经

 $ awk '{ mul = $1*$2; print mul }' input.txt > output.txt
但是output.txt文件的所有值都是0。
谁能告诉我哪里错了吗?如果你打印$1和$2的值,你就会看到问题所在。您还需要告诉
awk
使用
作为字段分隔符

这是您的代码的修订版本

  awk -F, '{ gsub(/[()]/, "", $0); mul = $1*$2; print mul }' input.txt > output.txt
输出

-8.76471
8.98128
-0.87286
-9.8901
$ cat f
 (-0.548,15.994)
  (1.008,8.91)
  (-0.19,4.594)
  (-0.99,9.99)
$ awk -F'[(,)]' '{ print $2*$3 }' f
-8.76471
8.98128
-0.87286
-9.8901

我认为Sheller用更好的选择击败了我几秒钟,但这里是:

sed 's/[^0-9,\.-]*//g' input.txt | awk '{split($1,x,","); mul=x[1]*x[2]; print mul}' > output.txt

awk
也可以有几个分隔符,您只需明智地设置字段sep
FS
-F
,这就足够了,您可以像下面这样简化您的命令

输入

-8.76471
8.98128
-0.87286
-9.8901
$ cat f
 (-0.548,15.994)
  (1.008,8.91)
  (-0.19,4.594)
  (-0.99,9.99)
$ awk -F'[(,)]' '{ print $2*$3 }' f
-8.76471
8.98128
-0.87286
-9.8901
输出

-8.76471
8.98128
-0.87286
-9.8901
$ cat f
 (-0.548,15.994)
  (1.008,8.91)
  (-0.19,4.594)
  (-0.99,9.99)
$ awk -F'[(,)]' '{ print $2*$3 }' f
-8.76471
8.98128
-0.87286
-9.8901