这里的要求是将位置9-12替换为空白。
我用过
cat file | awk '{sub(substr($0,9,12)," ",$0);print}'
有效,除非前面有空白 9. 尝试像这样指示分隔符
cat file | awk -F"*" '{sub(substr($0,9,12)," ",$0);print}'
没有帮助。这里正确的语法是什么?
示例文件:
$ cat file
1234567890123456
1234567 90123456
1234567890123456
1234567 90123456
1234567890123456
一个
awk
想法:
awk '{ print substr($0,1,8) " " substr($0,13) }' file
注意事项:
" "
替换为 " "
这会生成:
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
使用 GNU AWK
$ awk -v from=9 -v to=12 'BEGIN{FS=OFS=""}{for(i=from;i<=to;i++) $i=" "}1' file