这里的要求是将位置 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
代码。在 match
程序中使用 awk
函数,其中使用正则表达式 (^.{8}).{4}(.*$)
创建 2 个捕获组,并将值包含到数组 arr 中,然后打印数组 arr 的第一个和第二个元素。
awk '
match($0,/(^.{8}).{4}(.*$)/,arr){
print arr[1]" "arr[2]
}
' Input_file
使用 GNU AWK
$ awk -v from=9 -v to=12 'BEGIN{FS=OFS=""}{for(i=from;i<=to;i++) $i=" "}1' file