Linux命令之文本处理(二)
2015-06-23 15:47
507 查看
cut命令
cut命令用来操作文件的列,可以视为列编辑器;与之对应是大多数的行“编辑器”,如sed、grep、sort等,它们操作文本时,以行为单位。
cut的主要功能就是输出文本的某一列或几列。对于英文文本,一个字符就占据一列,所以输出几列就是输出几个字符。
主要选项如下:
-c : 指定要输出的列数,可以是单个数字,也可以是如3-5之类的范围。
-b : 指定每行要输出的字节数,与-c选项基本一样,尤其对英文文本,因为一个英文字母就是一个字节(我觉得把英文改成ASCII文本更合适)。
-f : cut更强大的地方在于处理格式化的文本,即每行可以分为几个字段的那种。似乎很多命令都提供这种功能,比如sort,但是做的都很勉强,关键是它们对分隔符的识别太差了。在这方面,awk遥遥领先。
-f选项用来指定输出哪个字段,默认的分隔符是tab。其实多个空格似乎也能识别,有时间我会专门研究一下分隔符的问题。
实际上new文件中名字和数字之间的分隔符并不是tab,而cut却正确识别了;然而,这种情况是不确定的,比如下例:
这么明显的分隔都没能识别,源码怎么写的???
-d : 指定分隔符,一般配合-f使用。分隔符一般只能指定单个字符。
-s : 仅输出包含分隔符的行。它会覆盖-f的一些功能,因为只有-f时,会同时输出不包含分隔符的行;加上-s选项后,就会删除掉没有包含分隔符的行。
–output-delimiter=str : 指定输出分隔符为str。默认与输入分隔符一致。
显然,这个选项只对不同字段之间有效。。。
uniq命令
可以检测出文本中重复的行,类似与sort中-u选项。
-d : 只显示那些重复的行。
-c,–count : 在每行前面显示重复次数。
-i : 忽略大小写。
-u : 仅输出不重复的行。
主要的就是这几个选项了,其他的比如-s、-f等,试了几次不管用。
cut命令用来操作文件的列,可以视为列编辑器;与之对应是大多数的行“编辑器”,如sed、grep、sort等,它们操作文本时,以行为单位。
cut的主要功能就是输出文本的某一列或几列。对于英文文本,一个字符就占据一列,所以输出几列就是输出几个字符。
主要选项如下:
-c : 指定要输出的列数,可以是单个数字,也可以是如3-5之类的范围。
m@meng:~$ cat new apple 3 Apple 7 pear 6 pear 4 banana 1 orange 11 m@meng:~$ cut -c 1-6 new apple Apple pear pear banana orange
-b : 指定每行要输出的字节数,与-c选项基本一样,尤其对英文文本,因为一个英文字母就是一个字节(我觉得把英文改成ASCII文本更合适)。
m@meng:~$ cut -b 3 new p p a a n a
-f : cut更强大的地方在于处理格式化的文本,即每行可以分为几个字段的那种。似乎很多命令都提供这种功能,比如sort,但是做的都很勉强,关键是它们对分隔符的识别太差了。在这方面,awk遥遥领先。
-f选项用来指定输出哪个字段,默认的分隔符是tab。其实多个空格似乎也能识别,有时间我会专门研究一下分隔符的问题。
m@meng:~$ cut -f 2 new 3 7 6 4 1 11
实际上new文件中名字和数字之间的分隔符并不是tab,而cut却正确识别了;然而,这种情况是不确定的,比如下例:
m@meng:/etc/network$ sudo netstat -apn | sed '3,6 p' -n | cut -f 1 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2899/sendmail: MTA: tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1192/named tcp 0 0 0.0.0.0:538 0.0.0.0:* LISTEN 1251/gdomap tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 672/smbd
这么明显的分隔都没能识别,源码怎么写的???
-d : 指定分隔符,一般配合-f使用。分隔符一般只能指定单个字符。
-s : 仅输出包含分隔符的行。它会覆盖-f的一些功能,因为只有-f时,会同时输出不包含分隔符的行;加上-s选项后,就会删除掉没有包含分隔符的行。
–output-delimiter=str : 指定输出分隔符为str。默认与输入分隔符一致。
m@meng:~$ cut --output-delimiter=: -f 1-2 new apple: 3 Apple: 7 pear: 6 pear: 4 banana: 1 orange: 11 m@meng:~$ cut --output-delimiter=: -c 1-4 new appl Appl pear pear bana oran
显然,这个选项只对不同字段之间有效。。。
uniq命令
可以检测出文本中重复的行,类似与sort中-u选项。
-d : 只显示那些重复的行。
m@meng:~$ cat new apple 3 apple 3 Apple 7 pear 6 pear 4 banana 1 orange 11 m@meng:~$ uniq -d new apple 3
-c,–count : 在每行前面显示重复次数。
m@meng:~$ uniq -c new 2 apple 3 1 Apple 7 1 pear 6 1 pear 4 1 banana 1 1 orange 11
-i : 忽略大小写。
-u : 仅输出不重复的行。
m@meng:~$ uniq -u new Apple 7 pear 6 pear 4 banana 1 orange 11
主要的就是这几个选项了,其他的比如-s、-f等,试了几次不管用。
相关文章推荐
- 嵌入式linux下如何使用usb键盘
- linux可用内存的计算
- linux 更改环境变量
- Linux and Unix crontab command
- Linux下的压缩解压缩命令详解
- linux用rz传大文件连接经常断开解决办法
- Linux编程实现守护进程
- Linux进程间通信(IPC)
- linux awk命令使用的一些心得--参数和内置属性
- linux awk命令使用的一些心得-基础命令
- Linux 套接字编程中的 5 个隐患(转)
- Linux下一个patch补丁命令
- linux vi 编辑常用按键说明
- linux下ctrl 常用组合键
- centOS安装telnet服务和xinetd服务和iptables和linux运行级别
- Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)
- linux grep命令使用的一些心得
- Linux ALSA声卡驱动之四:Control设备的创建
- Linux ALSA声卡驱动之三:PCM设备的创建
- Linux ALSA声卡驱动之二:声卡的创建