我有这个下面的样本文件abc.txt超过1000行
ABC00001|DEF00001|GHI00101|JKL01126|10|31|62|143|202301|01-01-2023
ABC00002|DEF00002|GHI00102|JKL01127|11|32|63|144|202301|01-01-2023
ABC00003|DEF00003|GHI00103|JKL01128|12|33|64|145|202301|01-01-2023
我需要从文件的前四列中删除字符和前导0。输出应该如下所示
1|1|101|1126|10|31|62|143|202301|01-01-2023
2|2|102|1127|11|32|63|144|202301|01-01-2023
3|3|103|1128|12|33|64|145|202301|01-01-2023
如何使用sed或awk命令实现这一点?
我是awk的新手,我已经多次使用sed命令来处理单个值,但是作为管道分隔符文件&在多个列上执行操作,我从来没有这样做过。
我尝试了echo ABC00001 | cut -c 4- | sed 's/^0*//'
,结果是1。我不知道如何将其合并到所有列的脚本中。
3条答案
按热度按时间xpszyzbs1#
我将使用GNU
AWK
来完成以下任务,让file.txt
内容那么
给出输出
说明:我通知GNU
AWK
管道字符既是字段分隔符(FS
)也是输出字段分隔符(OFS
)。我使用for
循环将以下更改应用于第1列到第4列(含):使用空字符串替换一个或多个(+
)前导(^
)字母字符([[:alpha:]]
),后跟零字符(0
),重复零次或多次(*
),即删除它们。完成后,Iprint
行。zbwhf8kr2#
使用任何sed:
enyaitl33#
这可能对您有用(GNU sed):
插入一个换行符作为前四个字段的分隔符,并在保留空间中复制一份。
删除当前行中除前四个字段以外的所有字段。
从其余每个字段中删除前导非数字和零。
使用换行符附加副本。
删除所有在未更改字段之前添加改进字段的换行符。
有几种选择: