Chinaunix

标题: 如何加顺序号? [打印本页]

作者: sense    时间: 2003-05-12 07:38
标题: 如何加顺序号?
有一文件格式如下:
11111|123|456|
11111|123|555|
11111|132|666|
22222|333|123|
22222|225|665|
33333|221|666|
如何变成这样:
1|11111|123|456|
2|11111|123|555|
3|11111|132|666|
1|22222|333|123|
2|22222|225|665|
1|33333|221|666|
作者: muzx    时间: 2003-05-12 07:45
标题: 如何加顺序号?
有什么规律吗?
作者: sense    时间: 2003-05-12 08:03
标题: 如何加顺序号?
11111|123|456|
11111|123|555|
11111|132|666|
22222|333|123|
22222|225|665|
33333|221|666|
就是将第一列相同的排序并将序列号写入
作者: aquino    时间: 2003-05-12 09:06
标题: 如何加顺序号?
事先要排序


  1. file.txt
  2. ------------------
  3. 11111|123|456|
  4. 11111|123|555|
  5. 11111|132|666|
  6. 22222|333|123|
  7. 22222|225|665|
  8. 33333|221|666|
  9. ------------------
复制代码


#uniq -w5 -c file.txt | awk '{print $1}' | awk '{for(i=1;i<=$1;i++) print i}' | paste -d'|' - file.txt


  1. result:
  2. --------------------
  3. 1|11111|123|456|
  4. 2|11111|123|555|
  5. 3|11111|132|666|
  6. 1|22222|333|123|
  7. 2|22222|225|665|
  8. 1|33333|221|666|
  9. --------------------
复制代码

作者: lj0388    时间: 2003-05-12 13:52
标题: 如何加顺序号?
nl  -s"|"  -w1  files >newfiles
作者: 月灵    时间: 2003-05-19 10:58
标题: 如何加顺序号?
编写个SHELL就可以
CAT FILENAME |AWK -F ‘|’{BEGIN  i=0}
作者: 月灵    时间: 2003-05-19 10:59
标题: 如何加顺序号?
编写个SHELL就可以
CAT FILENAME |AWK -F ‘|’{BEGIN  i=0}
作者: 月灵    时间: 2003-05-19 10:59
标题: 如何加顺序号?
编写个SHELL就可以
CAT FILENAME |AWK -F ‘|’{BEGIN  i=0}
作者: 月灵    时间: 2003-05-19 11:00
标题: 如何加顺序号?
编写个SHELL就可以
CAT FILENAME |AWK -F ‘|’{BEGIN  i=0}
作者: ncwyj    时间: 2003-05-19 15:36
标题: 如何加顺序号?
awk `{count[$1]++}end{for(num in count) {print count[num],$* }}` file>newfile
作者: 红袖添香    时间: 2003-05-20 04:26
标题: 如何加顺序号?
原帖由 "sense" 发表:
如何变成这样:
1|11111|123|456|
2|11111|123|555|
3|11111|132|666|
1|22222|333|12..........



ncwyj 的想法很好,只是有点小问题: awk 引号反了,并且 awk 中并没有 $* 的用法,应该是 $0

五楼的 lj0388 的解答得到的序号是 1 2 3 4 5 6 ,我想楼主不是这个意思,

月灵虽然说了四遍,却没说完...

我想只有 aquino 的解答是针对楼主的意思而且应该成功的吧,在 Solaris 下 uniq 没有 -w 参数,无法测试最后结果,但我想应该没问题。

如果想避免 uniq 和排序,可以这样


  1. nawk -F'|' '{
  2.     f1[$1]
  3.     if ( $1 in f1 ) {
  4.          count[$1]++
  5.     }
  6.     print count[$1] "|" $0
  7. }' file
复制代码


例如文件 file 为:

11111|123|456|
11111|123|555|
11111|132|666|
22222|333|123|
22222|225|665|
33333|221|666|
11111|132|777|

运行后为:

1|11111|123|456|
2|11111|123|555|
3|11111|132|666|
1|22222|333|123|
2|22222|225|665|
1|33333|221|666|
4|11111|132|777|

当然愿意的话,也可以事先用 sort 排一下,以使结果看起来更完美一些。
作者: zhkun    时间: 2003-05-20 08:52
标题: 如何加顺序号?
红袖添香能解释一下吗?
作者: sense    时间: 2003-05-21 13:25
标题: 如何加顺序号?
以上方法我虽没试,但感谢各位
作者: aquino    时间: 2003-05-21 14:07
标题: 如何加顺序号?
原帖由 "红袖添香" 发表:

ncwyj 的想法很好,只是有点小问题: awk 引号反了,并且 awk 中并没有 $* 的用法,应该是 $0

五楼的 lj0388 的解答得到的序号是 1 2 3 4 5 6 ,我想楼主不是这个意思,

月灵虽然说了四遍,却没说完...

我想只有 aquino 的解答是针对楼主的意思而且应该成功的吧,在 Solaris 下 uniq 没有 -w 参数,无法测试最后结果,但我想应该没问题。


真乃大家风范~
作者: kkng09    时间: 2003-05-21 15:05
标题: 如何加顺序号?
一行指令可完成.
awk -F '|' '{ if (buf==$1) {i++} else {i=1}; buf=$1; print i "|" $0;}' data.txt
        
作者: aquino    时间: 2003-05-21 15:14
标题: 如何加顺序号?
原帖由 "kkng09" 发表:
一行指令可完成.
awk -F '|' '{ if (buf==$1) {i++} else {i=1}; buf=$1; print i "|" $0;}' data.txt
        


事先要排序,要不然就不对了。
作者: 红袖添香    时间: 2003-05-21 17:57
标题: 如何加顺序号?
原帖由 "kkng09" 发表:
一行指令可完成.
awk -F '|' '{ if (buf==$1) {i++} else {i=1}; buf=$1; print i "|" $0;}' data.txt
        


最好还是写成多行,一行看得大家晕晕地~~~
作者: kkng09    时间: 2003-05-22 10:51
标题: 如何加顺序号?
加入事先要排序

sort data.txt |awk -F '|' '{ if (buf==$1) {i++} else {i=1}; buf=$1; print i "|" $0;}'
作者: zhuyj    时间: 2003-05-22 11:21
标题: 如何加顺序号?
真好!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2