使用 awk 将文件中的固定位置替换为值

问题描述 投票:0回答:2

这里的要求是将位置9-12替换为空白。

我用过

cat file | awk '{sub(substr($0,9,12),"   ",$0);print}'

有效,除非前面有空白 9. 尝试像这样指示分隔符

cat file | awk -F"*" '{sub(substr($0,9,12),"   ",$0);print}'

没有帮助。这里正确的语法是什么?

awk text-processing
2个回答
1
投票

示例文件:

$ cat file
1234567890123456
1234567 90123456
1234567890123456
1234567 90123456
1234567890123456

一个

awk
想法:

awk '{ print substr($0,1,8) "    " substr($0,13) }' file

注意事项:

  • 这会将第 9-12 个位置的 each 替换为空格(即将 4 个字段替换为总共 4 个空格)
  • 如果打算用一个空格替换 4 个字段,则将
    "    "
    替换为
    " "

这会生成:

12345678    3456
1234567     3456
12345678    3456
1234567     3456
12345678    3456

使用相同的思想动态处理仓位(类似于评论中Cyrus的建议):

awk -v start=9 -v end=12 '{ print substr($0,1,start-1) sprintf("%*s",(end-start+1)," ") substr($0,end+1) }' file

这也会生成:

12345678    3456
1234567     3456
12345678    3456
1234567     3456
12345678    3456

0
投票

使用 GNU AWK

$ awk -v from=9 -v to=12 'BEGIN{FS=OFS=""}{for(i=from;i<=to;i++) $i=" "}1' file
© www.soinside.com 2019 - 2024. All rights reserved.