Chinaunix
标题:
awk 去重 rs的问题
[打印本页]
作者:
idvicki
时间:
2014-10-14 17:17
标题:
awk 去重 rs的问题
有逗号分隔的字符串,需要去重.
awk设置RS为逗号,结果ms有问题
另外,如果需要在shell中把字符串去重之后转为数组,需要如何写? 谢谢
# cat pattern.txt
hello,hello
# awk -v RS="," '!a[$0]++' pattern.txt
hello
hello
#还有额外一行
# sed 's/,/\n/g' pattern.txt | awk '!a[$0]++'
hello
# cat pattern.txt
hello,hello,world
# awk -v RS="," '!a[$0]++' pattern.txt
hello
world
#还有额外一行
# sed 's/,/\n/g' pattern.txt | awk '!a[$0]++'
hello
world
作者:
reyleon
时间:
2014-10-14 17:46
echo hello,hello
因为 echo 会带一个回车符... 如果将 RS设成逗号.
则记录变成了:
hello //第一条记录
hello\n //第二条记录
!a[$0]++ 时自然没法去重..
try:
echo -n hello,hello | awk -v RS="," '!a[$0]++'
作者:
jason680
时间:
2014-10-14 18:30
回复
1#
idvicki
$ awk -vRS=",|
\n
" '!a[$0]++&&
NF
' pattern.txt
hello
作者:
yestreenstars
时间:
2014-10-14 19:54
当你把RS设成逗号时,行尾的换行符就变成普通字符了,所以会打印出来~{:3_193:}
作者:
idvicki
时间:
2014-10-14 20:48
谢谢各位,逗号分隔符的问题明白了,
还想请教一下, pattern.txt里面只有一行,应该是 hello,helloEOF才对啊,为何最后会有一个回车?
作者:
yestreenstars
时间:
2014-10-14 21:08
回复
5#
idvicki
没回车就不正常了~{:3_193:}
作者:
idvicki
时间:
2014-10-14 21:13
本帖最后由 idvicki 于 2014-10-14 21:15 编辑
回复
6#
yestreenstars
是说awk会在最后加一个换行符么? pattern.txt里面并没有换行符
作者:
yestreenstars
时间:
2014-10-14 22:35
回复
7#
idvicki
孩纸,我决定用实际行动告诉你有换行符和没换行符的区别~{:3_193:}
[root@localhost ~]# echo -n 'hello,hello' > i
[root@localhost ~]# awk -v RS="," '!a[$0]++' i
hello
[root@localhost ~]# echo 'hello,hello' > i
[root@localhost ~]# awk -v RS="," '!a[$0]++' i
hello
hello
[root@localhost ~]#
复制代码
作者:
jason680
时间:
2014-10-14 22:38
回复
7#
idvicki
dump your file and see the
newline
("
\n
",
0x0a
)
$ cat pattern.txt
hello,hello,world
$ hexdump -C pattern.txt
00000000 68 65 6c 6c 6f 2c 68 65 6c 6c 6f 2c 77 6f 72 6c |hello,hello,worl|
00000010 64
0a
|d.|
00000012
作者:
李满满
时间:
2014-10-14 22:58
学生党:无聊~python试试set去重
$ python
Python 2.7.8 (default, Jul 25 2014, 14:04:36)
[GCC 4.8.3] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> s='hello,hello,world'
>>> set(s.split(','))
set(['world', 'hello'])
作者:
idvicki
时间:
2014-10-15 09:12
回复
8#
yestreenstars
多谢!
作者:
idvicki
时间:
2014-10-15 09:16
回复
9#
jason680
多谢,明白了,我原来是 echo hello,hello > pattern.txt 的, vim -b 打开之后没有 %!xxd 转成16进制显示,所以一直没看到那个换行,改用echo -n就好了.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2