awk删除数字后的字符

时间:2013-10-21 21:05:38

标签: regex bash sed awk

我正在编写一个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完成,所以我可以在我的脚本中使用它? 干杯

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

使用awk:

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

使用sed:

sed -i.bak 's/-*$//' file

答案 2 :(得分:1)

另一种可能的解决方案:

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

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

此致 伊德里斯