Chinaunix
标题:
awk 问题请教
[打印本页]
作者:
zibingsu
时间:
2009-11-30 12:09
标题:
awk 问题请教
有文件有下面3列数据,
BBB00010 sn=75NB3804 67108864
BBB00011 sn=75NB3904 67108864
BBB00012 sn=75NB3704 67108864
AAA00013 sn=75NB3604 67108864
AAA00014 sn=75NB3504 67108864
AAA00015 sn=75NB3404 67108864
AAA00016 sn=75NB3304 67108864
AAA00017 sn=75NB2804 67108864
AAA00018 sn=75NB3204 67108864
AAA00019 sn=75NB3004 67108864
AAA000110 sn=75NB3104 67108864
AAA000111 sn=75NB2904 67108864
AAA000112 sn=75NB2604 67108864
AAA000113 sn=75NB2704 67108864
AAA000114 sn=75NB2504 67108864
AAA000115 sn=75NB2404 67108864
AAA000116 sn=75NB2304 67108864
AAA000117 sn=75NB2204 67108864
AAA000118 sn=75NB2104 67108864
AAA000119 sn=75NB2004 67108864
AAA000120 sn=75NB1904 67108864
AAA000121 sn=75NB1804 67108864
AAA000122 sn=75NB1704 67108864
AAA000123 sn=75NB1609 6220288
AAA000124 sn=75NB1604 67108864
AAA000125 sn=75NB1509 6220288
AAA000126 sn=75NB1504 67108864
AAA000127 sn=75NB1409 6220288
AAA000128 sn=75NB1404 67108864
AAA000129 sn=75NB1309 6220288
AAA000130 sn=75NB1304 67108864
AAA000131 sn=75NB1204 67108864
复制代码
想实现以下效果:
查找第一列是AAA的字符,打印出来前8行,将第2列的sn=替换为S:,不知道怎么用awk实现,不知道awk怎么处理匹配后的数据,请大家指点下,谢谢!
awk '/^AAA/NR<9{print substr($2,3)}'
^^^ ^^^ ^^^^^^^^^^^^^
匹配 前9行 然后再处理前8行的数据
我想处理后的结果如下.
NAME:AAA00013 S:75NB3604
NAME:AAA00014 S:75NB3504
NAME:AAA00015 S:75NB3404
NAME:AAA00016 S:75NB3304
NAME:AAA00017 S:75NB2804
NAME:AAA00018 S:75NB3204
NAME:AAA00019 S:75NB3004
NAME:AAA000110 S:75NB3104
复制代码
作者:
ywlscpl
时间:
2009-11-30 12:43
awk '/^AAA/{n++;sub(/sn=/,"S:",$2);print $1,$2}n==8{exit}' file
作者:
temp0411
时间:
2009-11-30 12:46
awk '/^AAA/, /^AAA/ {cnt++; sub(/sn=/, "S:", $2); print; if (cnt >=
exit }'
[
本帖最后由 temp0411 于 2009-11-30 12:47 编辑
]
作者:
zibingsu
时间:
2009-11-30 16:24
非常感谢2位,再请问下如果是要打印指定的行,这个应该怎么写,比如打印 10-15行,谢谢!
[
本帖最后由 zibingsu 于 2009-11-30 16:28 编辑
]
作者:
blackold
时间:
2009-11-30 16:28
标题:
回复 #4 zibingsu 的帖子
NR==10, NR==15
作者:
zibingsu
时间:
2009-11-30 17:15
非常感谢快速回复。
awk '/^IBM/NR==5,NR==11{n++;sub(/len=/,"S:",$2);print $1,$2}n==8{exit}'
awk '/^IBM/NR>=5&&NR<=11{n++;sub(/len=/,"S:",$2);print $1,$2}n==8{exit}'
这样好像都不行,继续求教,谢谢!
作者:
liaosnet
时间:
2009-11-30 17:28
标题:
回复 #6 zibingsu 的帖子
awk 'NR==10,NR==15{if($1~/AAA/){sub(/sn=/,"S:",$2);print $1,$2}}' ufile
复制代码
作者:
blackold
时间:
2009-11-30 17:29
作者:
yazi0127
时间:
2009-11-30 17:39
awk '/^AAA/{if(NR>=10&&NR<=15){sub(/sn=/,"S:",$2);print $1,$2}}' file
作者:
zibingsu
时间:
2009-11-30 17:54
多谢各位热心回答,aix下的awk太老,只支持NR>=10&&NR<=15。
作者:
lostwolf
时间:
2009-11-30 19:21
perl -ne 'if(/^AAA/){$i++;if ($i<=
{s/sn=/S/;print "$_";}}' file
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2