2

我正在编写一个 AWK 脚本来清理数据流,以便它可用于分析。现在,我有以下问题。

我有一个看起来像这样的数据流:

56, 2
64, 3
72, 0
80, -1-
88, -3--
96, 1
04, -2-
12, -7----
20, -1-
28, 7
36, 1
44, -3--
52, 3
60, 0
68, 0
76, -3--
84, -5---
92, 1
00, 4
08, 3
16, -2-
24, -3--
32, 1
40, 3

我想删除出现在数字字符之后的任何破折号,将减号保留在数字前面,所以它看起来像这样:

56, 2
64, 3
72, 0
80, -1
88, -3
96, 1
04, -2
12, -7
20, -1
28, 7
36, 1
44, -3
52, 3
60, 0
68, 0
76, -3
84, -5
92, 1
00, 4
08, 3
16, -2
24, -3
32, 1
40, 3

我知道如何使用 sed (sed 's/-*$//') 来执行此操作,但是如何仅使用 awk 来完成此操作,以便我可以在我的脚本中使用它?干杯

4

3 回答 3

3

一种方法,只需使用sub()

awk '{ sub(/-+$/, "", $NF); print }' infile

它产生:

56, 2
64, 3
72, 0
80, -1
88, -3
96, 1
04, -2
12, -7
20, -1
28, 7
36, 1
44, -3
52, 3
60, 0
68, 0
76, -3
84, -5
92, 1
00, 4
08, 3
16, -2
24, -3
32, 1
40, 3
于 2013-10-21T21:11:38.333 回答
2

使用 awk:

awk -F '-+$' '{$1=$1} 1' file

使用 sed:

sed -i.bak 's/-*$//' file
于 2013-10-21T21:15:33.090 回答
1

另一种可能的解决方案:

awk -F "-+$" '{str=""; for(i=1; i<=NF; i++){str=str""$i} print str}' file

但是,我认为 sed 在这种情况下是一个更好的解决方案。

问候,伊德里斯

于 2013-10-21T22:13:11.107 回答