当前位置: 技术问答>linux和unix
对文件操作, 如何定位到自己想要获取的内容位置
来源: 互联网 发布时间:2016-06-04
本文导语: 有一个比较长的文件, 但需求是读取其中的一些行和列, 那读文件的时候, 如何定位到那些行和列, 拿到需求的内容? | [root@RHEL4_U5 ~]# cat /proc/net/dev|head -n 1|awk -F '|' '{print $2,$3}'|column -t > temp1.sh...
有一个比较长的文件, 但需求是读取其中的一些行和列, 那读文件的时候, 如何定位到那些行和列, 拿到需求的内容?
|
[root@RHEL4_U5 ~]# cat /proc/net/dev|head -n 1|awk -F '|' '{print $2,$3}'|column -t > temp1.sh
[root@RHEL4_U5 ~]# cat /proc/net/dev|sed 1,2d | awk -F : '{print $2}'| awk -F ' ' '{print $1,$2,$9,$10}'|column -t > temp2.sh
[root@RHEL4_U5 ~]# pr -J -T temp1.sh temp2.sh
Receive Transmit
1172 17 1172 17
2173823 26370 3678630 19590
0 0 0 0
[root@RHEL4_U5 ~]#
自己结合自己的需求稍作修改吧,应该能用的
[root@RHEL4_U5 ~]# cat /proc/net/dev|sed 1,2d | awk -F : '{print $2}'| awk -F ' ' '{print $1,$2,$9,$10}'|column -t > temp2.sh
[root@RHEL4_U5 ~]# pr -J -T temp1.sh temp2.sh
Receive Transmit
1172 17 1172 17
2173823 26370 3678630 19590
0 0 0 0
[root@RHEL4_U5 ~]#
自己结合自己的需求稍作修改吧,应该能用的
|
[root@RHEL4_U5 test]# grep -n 1 manifold.sh
1:a001 login carp(256) carp(200)
[root@RHEL4_U5 test]# grep -n 2 manifold.sh
1:a001 login carp(256) carp(200)
2:2
选择指定行
1:a001 login carp(256) carp(200)
[root@RHEL4_U5 test]# grep -n 2 manifold.sh
1:a001 login carp(256) carp(200)
2:2
选择指定行
|
根据条件,自己用fseek来定位文件指针吧。
|
如果文件有固定的编码格式用fseek效率最高
|
什么样的文件呢?
如果比较规则,那就计算偏移,然后用 fseek 定位就行了;
如果不规则,那就必须逐行扫描了吧...
如果比较规则,那就计算偏移,然后用 fseek 定位就行了;
如果不规则,那就必须逐行扫描了吧...
|
# sed -r 's/^ +//;s/:/ /;s/|/ /g' /proc/net/dev | awk 'NR==1{print $1,$2,"-",$3,"-"}NR>1{print $1,$2,$3,$10,$11}' | column -t
Inter- Receive - Transmit -
face bytes packets bytes packets
lo 4009975563 1307652751 4009975563 1307652751
eth0 1437307323 2450719743 3905284117 2814464898
eth1 0 0 0 0
sit0 0 0 0 0
Inter- Receive - Transmit -
face bytes packets bytes packets
lo 4009975563 1307652751 4009975563 1307652751
eth0 1437307323 2450719743 3905284117 2814464898
eth1 0 0 0 0
sit0 0 0 0 0
|
发到这里不是对齐的了,在Shell里是对齐的。
|
有无固定格式,计算出偏移,用 fseek 可以试试...
|
如果楼主可以把文件的编码规则发出来,大家好对症下药
|
lseek ? 可以不?