shell文本过滤编程(十):cut命令

【版权声明:转载请保留出处:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】

cut命令类似于awk,从行里面抽取信息,是一个功能弱化版的awk。

cut命令格式为:cut [options] filename

其中options有:

-d  指定与空格和t a b键不同的域分隔符。类似于awk的“-F”。

-f field  指定剪切域数

-c list  指定剪切字符数。

首先我们来处理按:分割的password文件:

# cat passwd
root:x:0:0:root:/root:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
ftp:x:83:83:ftp:/home/ftp:/bin/sh
nobody:x:99:99:nobody:/home:/bin/sh
sshd:x:103:99:Operator:/var:/bin/sh

按:分割,然后取第一列和第六列,-f可以指定获取的域数:

# cut -d: -f1,6 passwd
root:/root
proxy:/bin
operator:/var
ftp:/home/ftp
nobody:/home
sshd:/var

指定域数还可以这样写:

# cut -d: -f 1-4,6 passwd
root:x:0:0:/root
proxy:x:13:13:/bin
operator:x:37:37:/var
ftp:x:83:83:/home/ftp
nobody:x:99:99:/home
sshd:x:103:99:/var

awk的实现为:

# awk -F: 'BEGIN{OFS=":"}{print $1,$2,$3,$4,$6}' passwd
root:x:0:0:/root
proxy:x:13:13:/bin
operator:x:37:37:/var
ftp:x:83:83:/home/ftp
nobody:x:99:99:/home
sshd:x:103:99:/var

但是如果要指定多个字符来分割的话,cut就不行了,cut只支持单个分隔字符,二awk支持多个。比如我们以“bin”分分隔:

# awk -F"bin" 'BEGIN{OFS=":"}{print $1}' passwd
root:x:0:0:root:/root:/
proxy:x:13:13:proxy:/
operator:x:37:37:Operator:/var:/
ftp:x:83:83:ftp:/home/ftp:/
nobody:x:99:99:nobody:/home:/
sshd:x:103:99:Operator:/var:/

使用cut:

# cut -d"bin" -f1 passwd
cut: the delimiter must be a single character
Try 'cut --help' for more information.

这里可以看见cut命令的功能很有限。

cut默认以tab键来分割,awk默认以空格或多个空格或tab键来分割:

# sed 's/:/\t/g' passwd | cut -f5
root
proxy
Operator
ftp
nobody
Operator
# sed 's/:/\t/g' passwd | awk '{print $5}'
root
proxy
Operator
ftp
nobody
Operator

cut可以剪切第任意字符,看似功能强大,但很少有使用价值。使用- c选项指定精确剪切数目。这种方法需确切知道开始及结束字符。通常不用这种方法,除非在固定长度的域或文件名上。

来看几个例子就行了:

# cut -c1,2,4 passwd
rot
prx
opr
ft:
noo
ssd
# cut -c5-9 passwd
:x:0:
y:x:1
ator:
x:83:
dy:x:
:x:10
时间: 2024-12-16 23:40:56

shell文本过滤编程(十):cut命令的相关文章

shell文本过滤编程(十一):paste命令

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 从字面上可以看出,paste命令和cut命令功能相反,cut命令是从文件行中取出字段,而paste命令是将文件行信息合并到一行. paste命令使用方法为: paste -d -s -file1 file2 -s选项是将文件行合并成一行. 比如现有如下文件: # paste 1.file name allen bob chris dyao # paste 1.f

shell特殊符号、cut命令、sort_wc_uniq命令、tee_tr_split命令、shell特殊符号下

shell特殊符号 * 任意个任意字符 [[email protected] ~]# ls *.txt 1.txt  23.txt  2.txt  david.txt ? 任意一个字符 [[email protected] ~]# ls ?.txt 1.txt  2.txt # 注释字符 [[email protected] ~]# #echo 'ok' \ 脱义字符 [[email protected] ~]# echo -e '123\n456\n789\t0000' 123 456 789

shell文本过滤编程(九):sed命令

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] sed和awk类似,是很重要的文本过滤工具. 调用sed和调用awk一样,有三种方式: 1. 在命令行键入命令: 2.将sed命令插入脚本文件,然后调用sed: 3. 将sed命令插入脚本文件,并使sed脚本可执行. 使用sed命令行格式为: sed [option] 'sed cmd' inputfile 使用sed脚本文件,格式为: sed [option]

shell文本过滤编程(一):grep和正则表达式

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] Linux系统中有很多文件,比如配置文件.日志文件.用户文件等.文件中都包含了大量的信息,我们可以使用cat等命令轻松将其输出到屏幕,但如果要从文件中分析或提取数据,还需要其他工具来实现.而linux正好提供了这些工具:grep.awk.sed等.把这些工具使用好,可以极大地提高你的工作效率,对系统管理员分析数据有极大帮助,而对linux开发人员来说也可以在开发

shell文本过滤编程(二):awk之基础

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 上一节说到了grep命令,grep命令主要用在获取符合规则的行信息.本节要讲的awk在对某文件或字符串中获取指定文本域有较强大的功能. a w k语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息. a w k抽取信息后,才能进行其他文本操作.完整的 a w k脚本通常用来格式化文本文件中的信息. 在命令行上调用awk命令式最常用的使用awk的方式:

shell文本过滤编程(一):grep和正則表達式

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] Linux系统中有非常多文件,比方配置文件.日志文件.用户文件等.文件里都包括了大量的信息,我们能够使用cat等命令轻松将其输出到屏幕,但假设要从文件里分析或提取数据,还须要其它工具来实现.而linux正好提供了这些工具:grep.awk.sed等.把这些工具使用好,能够极大地提高你的工作效率,对系统管理员分析数据有极大帮助,而对linux开发者来说也能够在开发

shell脚本编程-结构化命令2-for命令

1.for命令 (1)语法 for val in list; do commands done  list参数提供了一些列用于迭代的值,val值依次赋值为list中的值,知道list轮询结束. commands可以是一条或多条shell命令,echo $val可以查看当前循环的值 (2)读取列表中的值 $cat test #!/bin/bash # basic for command for test in A B C; do echo the next val is $test done $.

shell脚本编程-结构化命令1

1.分支语句 (1)if-then-fi 语句: 格式: if command; then commands fi 当command命令的退出状态码为$?=0时,进入分支,否则继续执行后面的命令. (2) if-then-else-fi 语句: 格式: if command; then commands1 else commands2 fi 当command命令的退出状态码为$?=0时,进入then分支,否则执行else分支命令. (3)if-then-elif-then-fi 语句: 格式:

shell文本过滤编程(八):awk之内置函数

[版权声明:转载请保留出处:blog.csdn.net/gentleliu.Mail:shallnew at 163 dot com] 这一节来见识一下a w k许多强大的字符串函数及其使用方法. 1. sub 和 gsub函数: 用法:sub( Ere, Repl, [ str ] ) gsub( Ere, Repl, [ str ] ) 在第三个参数给出字符串中查找满足Ere 参数指定的扩展正则表达式的字符串,并使用第二个参数替换之.如果未指定 In 参数,缺省值是整个记录($0 记录变量)