cut命令 -d -f

https://blog.csdn.net/u011700318/article/details/38554581?utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/RHEL_admin/article/details/37508101?ops_request_misc=%7B%22request%5Fid%22%3A%22158217786119725211963913%22%2C%22scm%22%3A%2220140713.130056874..%22%7D&request_id=158217786119725211963913&biz_id=0&utm_source=distribute.pc_search_result.none-task

https://blog.csdn.net/Frozen_fish/article/details/2260804?utm_source=distribute.pc_relevant.none-task

https://www.runoob.com/linux/linux-comm-cut.html

参数:

  • -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。  byte
  • -c :以字符为单位进行分割。  char
  • -d :自定义分隔符,默认为制表符。  define
  • -f :与-d一起使用,指定显示哪个区域。   fields   一般用以指定分隔符后的第几列
  • -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
    范围之内,该字符将被写出;否则,该字符将被排除

语法:  必须指定 -b、-c 或 -f 标志之一。

  • cut [-bn] [file]
  • cut [-c] [file]
  • cut [-df] [file]

例子:

1、英文字符

[root@rhel6164 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@rhel6164 ~]# echo $PATH | cut -d ':' -f 2,4-6 #使用:分割后,选择打印出第2,4,5,6段信息
/usr/local/bin:/bin:/usr/sbin:/usr/bin
————————————————

[root@rhel6164 ~]# echo $PATH | cut -c 2 #以字符为单位来分割,然后打印出第二个字符
u
————————————————

[root@rhel6164 ~]# echo $PATH | cut -b 2,4 #打印出第二个和第四个字节
ur

2、汉字

    GBK编码下,一个汉字占2个字节;
    UTF-8编码下,一个汉字占3个字节
    UTF-8是一种国际通用的一种变长编码,ASCII对应的字符在UTF-8下占1个字符,西方文字(希腊文字)占2个字符,中文占用3个字节数,还有    平面符号占4个字节。

cat testch.txt 
我 的 兴 趣 是
羽 毛 球 篮 球

cat testch.txt |cut -b 1-3(截取字节位置为1-3)  一个汉字相当于3个byte
我
羽

cat testch.txt |cut -c 1-2
我
羽

cat testch.txt |cut -b 3-5,8(截取字节位置为3-5和第8个字节)

3、以区域定位(有固定分隔符

为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。如果你观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。

以/etc/passwd的前五行内容为例:

[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

-d自定义分隔符(若不定义,默认分隔符为制表符),-f设置返回第几列,例如3-5或者4-类似的格式:

[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 2|cut -d : -f 1,3-5
root:0:0:root
bin:1:1:bin

 补充unique用法:(先sort再uniq)

        uniq只作用于相邻的重复行,即相隔的重复行不会去掉;所以要先排序sort再去重uniq

        cat test.txt |cut -f 3-4,5|sort|uniq


4、区分空格符和制表符

空格符:   cat xxx.txt|head -2|cut -d' ' -f 1-3

制表符:   cat xxx.txt|head -2|cut -f 1-3  (默认分隔符为制表符,直接获取列即可)

A1、B1、C1所代表的行字符之间均以TAB分隔,D1却是以空格来分开的。

-s的作用:(筛选得到真正制表符的行)

第一行不含有任何TAB字符,所以直接被剔除了。

D1行,是以空格区分间距,所以也不合要求。

5、替换分隔符(  --output-delimiter='#' )

发布了26 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wuli13141516/article/details/104419255