Linux/bash下为数据集第三列小于10的行首添加前导0的方法
实现方法
针对空格分隔的字段筛选后修改行首的需求,有两种常用实现方式,优先推荐适配性更好的awk方案:
- awk方案(推荐)
直接通过字段数值判断是否加前缀,不受多空格、制表符分隔的影响:
执行逻辑:awk '$3 < 10 {printf "0"} 1' 待处理文件路径 > 处理后文件路径
awk默认将连续空白识别为字段分隔符,$3对应第三列数值:- 若第三列数值小于10,先输出字符
0 - 命令末尾的
1是awk简写语法,代表打印当前整行原始内容
该方案为数值比较逻辑,不会出现正则匹配漏判、错判的问题。
- 若第三列数值小于10,先输出字符
- sed方案
若需要使用sed实现,可先通过正则匹配符合条件的行,仅对目标行执行替换操作:
执行逻辑:sed '/^[^ ]* [^ ]* [0-9] /s/^/0/' 待处理文件路径 > 处理后文件路径
替换操作前增加行匹配规则,仅当第三列为单个0-9数字(数值小于10)时,才执行行首加0的替换,其余行直接输出原文,不会全局修改所有行。
使用上述两种命令处理提供的样例数据,输出结果与预期完全一致:第三列为9的行首自动补0,第三列为10的行无修改。
内容的提问来源于stack exchange,提问作者Spencer K
相关产品推荐
相关产品推荐

