我正在编写一个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完成,所以我可以在我的脚本中使用它? 干杯
答案 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是更好的解决方案。
此致 伊德里斯