目录
cut 列提取命令
printf 格式化输出
cut 列提取命令
[root@localhost ~]# cut [选项] 文件名
- 选项:
- -f 列号: 提取第几列
- -d 分隔符: 按照指定分隔符分割列
- -c 字符范围: 不依赖分隔符来区分列,而是通过字符范围(行首为 0)来进行字段提取。“n-”表示从第 n 个字符到行尾;“n-m”从第 n 个字符到第 m个字符;“-m”表示从第 1 个字符到第 m 个字符。
- cut 命令的默认分隔符是制表符,也就是“tab”键,不过对空格符可是支持的不怎么好啊。我们先建立一个测试文件,然后看看 cut 命令的作用吧:
[root@localhost ~]# cut -f 2 student.txt
#提取第二列内容
- 那如果想要提取多列呢?只要列号直接用“,”分开,命令如下:
[root@localhost ~]# cut -f 2,3 student.txt
- cut 可以按照字符进行提取,需要注意“8-”代表的是提取所有行的第十个字符开始到行尾,而“10-20”代表提取所有行的第十个字符到第二十个字符,而“-8”代表提取所有行从行首到第八个字符:
[root@localhost ~]# cut -c 8- student.txt
#提取第八个字符开始到行尾,好像很乱啊,那是因为每行的字符个数不相等啊
[root@localhost ~]# cut -d ":" -f 1,3 /etc/passwd
#以“:”作为分隔符,提取/etc/passwd 文件的第一列和第三列
- 如果我想用 cut 命令截取 df 命令的第一列和第三列,就会出现这样的情况:
[root@localhost ~]# df -h | cut -d " " -f 1,3
printf 格式化输出
[root@localhost ~]# printf ‘输出类型输出格式’ 输出内容
- 输出类型:
- %ns: 输出字符串。n 是数字指代输出几个字符
- %ni: 输出整数。n 是数字指代输出几个数字
- %m.nf: 输出浮点数。m 和 n 是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出 8 位数,其中 2 位是小数,6 位是整数。
- 输出格式:
- \a: 输出警告声音
- \b: 输出退格键,也就是 Backspace 键
- \f: 清除屏幕
- \n: 换行
- \r: 回车,也就是 Enter 键
- \t: 水平输出退格键,也就是 Tab 键
- \v: 垂直输出退格键,也就是 Tab 键
- 为了演示 printf 命令,我们需要修改下刚刚 cut 命令使用的 student.txt 文件,文件内容如下:
- 我们使用 printf 命令输出下这个文件的内容:
[root@localhost ~]# printf '%s' $(cat student.txt)
IDNamegenderPHPLinuxMySQLAverage1LimingM82958687.662ScM74968785.663TgM99839391.66[root@
localhost ~]#
- 这就是 printf 命令,如果不指定输出格式,则会把所有输出内容连在一起输出。其实文本的输出本身就是这样的,cat 等文本输出命令之所以可以按照格式漂亮的输出,那是因为 cat 命令已经设定了输出格式。那么为了用 printf 输出合理的格式,应该这样做:
- 如果不想把成绩当成字符串输出,而是按照整型和浮点型输出,则要这样:
[root@localhost ~]# printf '%i\t %s\t %i\t %i\t %i\t %8.2f\t \n' \
$(cat student.txt | grep -v Name)
【注】:参考尚硅谷沈超老师教程