将数据文件中特定列范围内的一串空格更改为一串 0

将数据文件中特定列范围内的一串空格更改为一串 0

我们使用 Redhat Linux 7.9 和bsh.

我想浏览一个数据文件,并将第 10 列和第 20 列之间有空格的所有字段替换为 0。

因此,如果我有一个示例文件:

#######################

#######################

#######################

#########        ######

#######################

#######################

#######################

#######################

我希望脚本看起来像:

#######################

#######################

#######################

#########000000000#####

#######################

#######################

#######################

#######################

我尝试过使用以下内容:

awk '{val=substr($0,10,9);gsub(val,"     ","000000000")}1' scr1

但它只返回原始文件。我错过了什么?

答案1

Perl 可以对此进行简短的处理,如图所示。

由于 Perl 索引从 0 开始,因此第 10 列是 9,并且 col10...20 有 20-10+1=11 个元素。

$ perl -lpe 'substr($_, 9, 11) =~ tr/ /0/' file

输出:-

#######################

#######################

#######################
12345678901234567890
#########00000000000###
         12345678901
#######################

#######################

答案2

您的gsub()参数顺序和含义错误,请参阅手册页。

看起来这可能就是您想要做的事情,在每个 Unix 机器上的任何 shell 中使用任何 awk:

$ awk '{val=substr($0,10,9)} gsub(/ /,0,val){$0=substr($0,1,9) val substr($0,19)} 1' file
#######################

#######################

#######################

#########00000000######

#######################

#######################

#######################

#######################

相关内容