大家好我正在处理一些文字我有以下列表:
19599
9259
9259
9259
9259
9259
9159
9157
RTSR
RTSR
AWKJ001
AWKJ001
AWKJ001
9159
我想要的输出是:
019599
009259
009259
009259
009259
009259
009159
009157
RTSR
RTSR
AWKJ001
AWKJ001
AWKJ001
009159
我用记事本手动尝试但是列表太长了,我相信最好的方法是构建一个正则表达式,正则表达式应该查找以数字开头的思考并计算有多少字符必须然后放两个或一个0来使该数字的大小为6,例如
19599 -> 019599
9259 -> 009259
但它不应该以字母开头的行进行任何更改,例如:
AWKJ001
感谢您的支持,
答案 0 :(得分:4)
awk
可以轻松完成此操作:
awk '$0+0 == $0 {$0 = sprintf("%06i", $0)} 1' file
019599
009259
009259
009259
009259
009259
009159
009157
RTSR
RTSR
AWKJ001
AWKJ001
AWKJ001
009159
工作原理:
$0+0 == $0
检查给定的行是否仅为数字sprintf("%06i", $0)
使用6
填充0
长度
答案 1 :(得分:1)
这是一个perl one-liner:
perl -ple 'if (/^\d/) {$_="0" x (6-length($_)) . $_}' input
输出:
019599
009259
009259
009259
009259
009259
009159
009157
RTSR
RTSR
AWKJ001
AWKJ001
AWKJ001
009159
从概念上讲,这很简单。我们检查默认变量($_
)是否包含以数字开头的字符串,如果是,我们只是在它前面加上6-length($_)
个零。
答案 2 :(得分:1)
一些null
。首先用五个0(show_errors_inline
- > sed
)替换所有数字字符串的开头,然后使用反向引用将所有数字字符串替换为最后六个数字( 9259
000009259
):
000