awk 如何删除文本每一行中的最后一个字符? 如abc.def.hig. 有1000行相同格式,想删除最后一个.

是字符不是一个字段

y:root:/tmp/ss> xx37
ab
de
gh
jk
mn
pq
st
vw
yz
13

y:root:/tmp/ss> cat xx37.dat
abc
def
ghi
jkl
mno
pqr
stu
vwx
yzz
132

y:root:/tmp/ss> cat xx37
#!/bin/bash
awk '{
gsub(/.$/,"")
print
}' xx37.dat追问

不好意思,就是问题不够完善,比如这些行中,有的行最后一位是点,有的不是,首先应该要进行一下判断,应该怎么写了?

追答

你的意思是?只删除字符,如果最后一个字符是点则保持不变?如果是这样的话,改成如下:

#!/bin/bash
awk '{
gsub(/[^\.]$/,"")
print
}' xx37.dat

追问

刚才试了你的果然很好用,另外一个我也试出来了。相当感谢。继续问一下,如果我想根据每一行的第三字段来统计个数应该怎么办了?就是如果第三字段不同个数+1,如果相同就不增加。回答一定加分啊。

追答

试一下下边这个

awk '{ary[$3]++}
END{
for(key in ary)
print key " " ary[key]
}' file

温馨提示:内容为网友见解,仅供参考
无其他回答

...如abc.def.hig. 有1000行相同格式,想删除最后一个.
y:root:\/tmp\/ss> cat xx37.dat abc def ghi jkl mno pqr stu vwx yzz 132 y:root:\/tmp\/ss> cat xx37 !\/bin\/bash awk '{ gsub(\/.$\/,"")print }' xx37.dat

相似回答
大家正在搜