-
概述
- 简述 shell 命令行工具 cut
-
背景
-
偶尔需要用 awk 来筛选特定的列
- awk 很是强大
- 但是强大的背后, 却伴随着复杂
- 其实同样的功能, awk 也没有复杂多少
-
如果是 简单的任务, cut 工具完全是可以胜任的
- 切割行内的特定位置
- 切割行内的特定字段
- 描述可能不是很准确, 下面会有例子
-
1. 准备
-
os
- centos7
-
文件
-
cutdemo01
1:2:3:4:5 1:2:3:4:5 1:2:3:4:5
-
cutdemo02
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
-
2. 场景1: 切割行内的特定位置
-
概述
- 想切割行内的特定字符
-
命令
-
命令1: 切割单个字符
# -c 表示切割行内的 特定字符 # 下标从 1 开始 # 如果超出范围, 会返回 空内容 > cut -c1 cutdemo01 1 1 1
-
命令2: 切割连续字符
# 下标从 1 开始, 3 结束 > cut -c1-3 cutdemo01 1:2 1:2 1:2
-
命令3: 切割不连续字符
# 下标从 1 开始, 3 结束, 外加第 5 个字符 > cut -c1-3,5 cutdemo01 1:23 1:23 1:23
-
3. 场景2: 切分行内特定字段
-
概述
- 类似 awk 的切割方式
-
命令
-
命令1: 切割特定分隔符下的字段
-d 指定分隔符 -f 指定字段 > cut -d\':\' -f 1 cutdemo01 1 1 1
-
命令2: 切割特定分隔符下的连续字段
# -f 类似 之前的 -c # 结果中, 每个字段, 会用 -d 指定的分隔符隔开 > cut -d\':\' -f 1-3 cutdemo01 1:2:3 1:2:3 1:2:3
-
命令3: 切割特定分隔符下的不连续字段
> cut -d\':\' -f1-3,5 cutdemo01 1:2:3:5 1:2:3:5 1:2:3:5
-
-
疑问
- 如果要用 tab 分列, 命令行打不出 tab, 用 \\t 转义也不好使, 该怎么办
- 可以看看 man 命令
- 不带 -d, 默认就是用 tab 来分
- 可以看看 man 命令
- 如果要用 tab 分列, 命令行打不出 tab, 用 \\t 转义也不好使, 该怎么办
-
坑
- cut 只能以 一个字符 作为分隔符
-
所以可能会有 两种可能会坑
- 需要 连续多个字符, 做分隔符
- 同时使用 多种字符, 做分隔符
-
解决
- 使用 awk
-
- cut 只能以 一个字符 作为分隔符
ps
-
ref
-
- 讲得很简单
-
- 给了点启发, 让我认识到 awk 的强大
-
-
最近魂不守舍, 不知道写啥
- 拿之前的东西来充数
- 充一篇少一篇...
- 拿之前的东西来充数