一个文件里边有很多数据, grep 命令是用来提取文本内容包含匹配规则的行,而 cut 命令是用来截取文本内容中的列数据。
使用如下文本:
使用 cut 命令提取student.txt文本中的第二列信息
如果只需要第二列信息,且不需要标题,就需要结合前边说的 grep 命令一起使用了。
如果想要提取文本中多列数据,只要将列号直接用 , (逗号)分开即可,命令如下:
cut 命令可以按照字符进行提取,需要注意 8- 代表的是提取所有行的第十个字符开始到行尾,而
10-20 代表提取所有行的第10个字符到第20个字符,而 -8 代表提取所有行从行首到第8个字符。
例如:以 : 作为分隔符,提取 /etc/passwd 文件中,普通用户的第一列和第三列数据信息。
需要先过滤掉伪用户和root用户,在切割提取。
之后我们就可以把这些提取出来的数据,传入变量中,然后该变量就可以在程序中进行 *** 作了。
cut 命令默认分隔符是制表符(tab键),而不是使用空格来进行分隔,因为 cut 命令不识别空格作为分隔符。
如果有特定的符号,也是可以用 -d 选项进行指定做为分隔符。
而空格不推荐作为 cut 命令的分隔符。
如查看磁盘情况的 df 命令:
这个命令中间的分隔就是空格。
如我们通过 cut 命令获取二列信息,如下:
我们看到 cut 命令默认是不识别空格作为分隔符的。
如果我们用 -d 选项指定空格作为分隔符,如下:
可以看到获取的是一列空格,也非常的不好用。
所以不推荐空格作为 cut 命令的分隔符。
cut命令的用法如下:cut - 在文件的每一行中提取片断
在 每个文件 FILE 的 各行 中, 把 提取的 片断 显示在 标准输出.
-b, --bytes=LIST
输出 这些 字节
-c, --characters=LIST
输出 这些 字符
-d, --delimiter=DELIM
使用 DELIM 取代 TAB 做 字段(field) 分隔符
-f, --fields=LIST
输出 这些 字段
-n
(忽略)
-s, --only-delimited
不显示 没有 分隔符 的 行
--output-delimiter=STRING
使用 STRING 作为 输出分隔符, 缺省 (的 输出分隔符) 为 输入分隔符
--help
显示 帮助信息, 然后 结束
--version
显示 版本信息, 然后 结束
使用 且 只使用 -b, -c 或 -f 中的 一个 选项. LIST 由 一个 范围 (range) 或 逗号 隔开的 多个 范围 组成. 范围 是 下列 形式 之一:
N
第 N 个 字节, 字符 或 字段, 从 1 计数 起
N-
从 第 N 个 字节, 字符 或 字段 直至 行尾
N-M
从 第 N 到 第 M (并包括 第M) 个 字节, 字符 或 字段
-M
从 第 1 到 第 M (并包括 第M) 个 字节, 字符 或 字段
如果 没有 指定 文件 FILE, 或 FILE 是 -, 就从 标准输入 读取 数据.
曾经有一同事问我,在linux下如何输出一个文本文件的第二列,文本内容不限。我不假思索地说用 awk 啊。她追问只有这一种方式么?于是我仔细想了想,……
既然内容不限,则可以自定义文件内容的格式,这样可以用的命令自然会多一些。
需求为输出文件第二列,则基本上有两种方式实现:
因而,任何能直接输出特定列的命令,以及能够截取或删除其它列的命令都满足此需求。
为了方便说明,列举几个示例文件:
awk自然是最容易想到的,它处理格式化的文本得心应手。
使用 -F 指定列(字段)分隔符。
如果文件只有两列,还可以使用 $NF ,如 awk '{print $NF}' test1.txt 。
awk还支持一些函数,同样可以将第二列提取出来,此处不再赘述。
cut命令的默认字段分隔符是 TAB ,可以使用 -d 重新指定。 -f 列出指定字段。
如果第二列的字符的起始和结束序号为固定值,如test2.txt,可以使用 -c 参数,截取特定的字符序列。
sed采用的是第二种实现方式,即将其它列删除掉,利用 后向引用 :
在test1.txt中,第二列的前面和后面分别为数字空格和空格数字,所以可以利用 正则表达式 将其输出出来。
同理:
colrm命令可以删除标准输入中的指定列,但 该命令中所定义的列指的是单个字符 ,这与常规对字段的定义不同,需注意。
格式如下:
如果只指定start,则大于等于start的列均被删除;如果指定了start和stop,则大于等于start,小于等于stop的列被删除。
因此,此命令可处理第二个字段起始位置为固定值的test2.txt文件。
read读取文件中的每行,将特定的列输出来。
shell支持命令替换,通过两次命令替换,得到第二列:
虽然不清楚她从哪里看到的这道题目,题目本身是何用意。但以一个问题,调动起了对linux多个命令及知识点的学习和总结,还是有价值的。
欢迎提出不同解法!
相关命令
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)