Chinaunix
标题: 文本按列记录分类处理 [打印本页]
作者: zBS 时间: 2012-10-31 09:12
标题: 文本按列记录分类处理
我现在有这样文本,本身只有第一列,为了方便处理,我添加了第二列,要求是按照第2列数字每个记录取一行,分批取出来,每次取出的记录第2列记录不能重复,我只会用awk '!a[$2]++'单次来取,请问有办法shell一次完成吗?或者把第一列如果第13和14个字符相同的整成横向排列,这样很非常好处理,非常感谢大家帮忙!
作者: yestreenstars 时间: 2012-10-31 09:58
Try- awk '{a[$2]=a[$2]?a[$2]" "$1:$1}END{for(i in a)print a[i]}' urfile
复制代码
作者: jason680 时间: 2012-10-31 10:06
回复 1# zBS
How about this
$ echo 'ibm_ds8x000_000a
ibm_ds8x000_000b
ibm_ds8x000_0106
ibm_ds8x000_0107' | awk '{id=substr($0,13,2);if(last!=""&&id!=last)print "";printf $0" ";last=id}END{print""}'
ibm_ds8x000_000a ibm_ds8x000_000b
ibm_ds8x000_0106 ibm_ds8x000_0107
作者: reyleon 时间: 2012-10-31 10:29
回复 2# yestreenstars
能解释下吗? 着实对awk数组一直都不会用,或者有数组这方面比较好的资料推荐看吗?
作者: yestreenstars 时间: 2012-10-31 10:57
本帖最后由 yestreenstars 于 2012-10-31 11:03 编辑
回复 4# reyleon - awk '{a[$2]=a[$2]?a[$2]" "$1:$1}END{for(i in a)print a[i]}' urfile
复制代码以$2为下标建立数组a,如果a[$2]存在就在原a[$2]的后面添加一个空格和$1,然后赋值给a[$2],如果a[$2]不存在,就把$1赋值给a[$2]。我刚接触数组时也不是很能理解,后来通过看很多例子,就慢慢理解了,你可以通过这篇精华理解一下,虽然我还没看过,不过应该不错的。
http://bbs.chinaunix.net/thread-2312439-1-1.html
作者: reyleon 时间: 2012-10-31 11:04
回复 5# yestreenstars
谢谢,我再去多学习学习,多练习练习。
作者: nathanielwen 时间: 2012-10-31 11:29
小弟学shell没多久,所以不会用awk编,跟3楼的思路是一样的,但是速度慢很多,以后果断好好学awk啊。
#!/bin/bash
before=00
for i in $(cat test.txt);do
now=$(echo $i | cut -c13,14)
if [ $before == $now ]
then
echo -e "$i \c"
#输出不换行
else
echo -e "\n$i \c"
#换行输出
fi
before=$(echo $i | cut -c13,14)
done
echo ""
——————————————————
test.txt里的内容是没有第二列的文本
作者: zBS 时间: 2012-10-31 11:31
回复 3# jason680
行了,非常感谢!另外问一下,能实现我前面说的结果吗?就是重新排序。按照13和14个字符不重复的原则。
作者: jason680 时间: 2012-10-31 13:25
回复 8# zBS
How about this
$ echo 'ibm_ds8x000_0006
ibm_ds8x000_0007
ibm_ds8x000_0108
ibm_ds8x000_0109
ibm_ds8x000_020a
ibm_ds8x000_020b' | awk '{id=substr($0,13,2);if(id!=last){t++;c=0};a[t,++c]=$0;last=id}END{for(n=1;n<=c;n++)for(m=1;m<=t;m++)print a[m,n]}'
ibm_ds8x000_0006
ibm_ds8x000_0108
ibm_ds8x000_020a
ibm_ds8x000_0007
ibm_ds8x000_0109
ibm_ds8x000_020b
作者: zBS 时间: 2012-10-31 21:40
回复 9# jason680
再次感谢!我得好好学习下awk了。
作者: zBS 时间: 2012-11-01 09:22
回复 2# yestreenstars
这个也非常给力,非常感谢,昨天回帖没成功!
作者: zBS 时间: 2012-11-01 09:35
回复 7# nathanielwen
这个也很好,思路很不错,感谢!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) |
Powered by Discuz! X3.2 |