文件中有很多行,如下所示:
000100667 ===> 000102833
005843000 ===> 005844000
011248375 ===> 011251958
我想在数字中插入特定的分隔符,如下所示:
00:01:00,667 ===> 00:01:02,833
00:58:43,000 ===> 00:58:44,000
01:12:48,375 ===> 01:12:51,958
现在我正在尝试(仅第一部分成功):
echo 000100667 | gawk '{printf "%s:%s:%s,%s\n", $1, $2, $3, $4}' FIELDWIDTHS="2 2 2 3"
使用您提供的示例,请尝试以下
awk
代码。使用 GNU 编写并测试awk
。解决
FIELDWIDTHS
方案:使用所示样本进行编写和测试。使用 GNU sed:
它将任何以数字开头的九个字符的字符串分隔开来(数字是模式内的位置):
123456789
变成12:34:56,789
。如果太笼统,
.
则应将(“任何字符”)替换为[0-9]
(“数字”)。输出:
使用带有标志的 sed
-E
:精确匹配a行中的字符串。
根据POSIX,ERE标志
-E
/选项现在是sed的标准该行为可能因您的区域设置而异,这会影响字符类别的喜好
[[:digit:]]
或[a-z]
解释方式。这可能对你有用(GNU sed):
使用模式匹配和替换以及反向引用。
对于
belt and braces
方法:或者:
使用支持 GNU或
gensub()
以下的awk :awk
mawk2
或使用 any
awk
:我会按照以下方式改进你的解决方案,让
file.txt
内容成为然后
给出输出
解释:我逐字使用了 FIELDWIDTHS,但告知 GNU Awk 行之间可以用
===>
(包括空格)或 (|
) 换行符分隔。我将其更改printf
为最后一个字符为行终止符 (RT
),因此对于剩余的值, ===> 为 ===>,对于所有其他值,均使用换行符。(在 GNU Awk 5.3.1 中测试)