我将数据保存在可用于统计分析的矩阵中。为了分析的目的,我需要将所有数字包含在绝对值中,否则算法将失败。数据样本如下:
NUMBER SQUARE SQUARE ROOT
-1 1 -1.000
2 -4 -1.414
-3 -9 1.732
-4 -16 2.000
5 25 -2.236
6 -36 -2.449
-7 49 2.646
-8 64 2.828
9 -81 3.000
10 -100 -3.162
-11 121 3.317
-12 -144 -3.464
13 169 3.606
-14 -196 -3.742
如何将此表中的数字转换为绝对值。
答案1
您可以sed
按如下方式使用:
sed 's/-//g' file | column -t
您可以awk
按如下方式使用:
awk '{for (i=1; i<=NF; i++) if ($i < 0) $i = -$i; print }' file | column -t
NUMBER SQUARE SQUARE ROOT
1 1 1.000
2 4 1.414
3 9 1.732
4 16 2.000
5 25 2.236
6 36 2.449
7 49 2.646
8 64 2.828
9 81 3.000
10 100 3.162
11 121 3.317
12 144 3.464
13 169 3.606
14 196 3.742
答案2
如果您需要的只是使所有值均为正值,则只需删除所有破折号即可。
$ <infile sed 's/-//g'
NUMBER SQUARE SQUARE ROOT
1 1 1.000
2 4 1.414
3 9 1.732
4 16 2.000
5 25 2.236
6 36 2.449
7 49 2.646
8 64 2.828
9 81 3.000
10 100 3.162
11 121 3.317
12 144 3.464
13 169 3.606
14 196 3.742
如果您需要好的列中的值,请添加column -t
(但也要更改标题行以使第三个条目成为一个单词SQUARE_ROOT
):
<infile sed 's/-//g' | column -t
NUMBER SQUARE SQUARE_ROOT
1 1 1.000
2 4 1.414
3 9 1.732
4 16 2.000
5 25 2.236
6 36 2.449
7 49 2.646
8 64 2.828
9 81 3.000
10 100 3.162
11 121 3.317
12 144 3.464
13 169 3.606
14 196 3.742
所有这些都可以通过调用 awk 来完成:
$ awk 'NR==1;NR!=1{gsub(/-/,"");printf("%5g %8g %11.3f\n",$1,$2,$3)}' infile
NUMBER SQUARE SQUARE_ROOT
1 1 1.000
2 4 1.414
3 9 1.732
4 16 2.000
5 25 2.236
6 36 2.449
7 49 2.646
8 64 2.828
9 81 3.000
10 100 3.162
11 121 3.317
12 144 3.464
13 169 3.606
14 196 3.742