首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查文件中一行索引的特定范围内是否有空格,并将空格替换为0。

检查文件中一行索引的特定范围内是否有空格,并将空格替换为0。
EN

Stack Overflow用户
提问于 2022-02-01 15:23:31
回答 2查看 131关注 0票数 1

我面临以下问题。我在一个文件中有几行代码,下面有一个示例。位置4-10之间的值可以包含任何值和空格的组合,只有当它是空空间时,它才被替换为0。

代码语言:javascript
运行
复制
#input.txt

014       789000
234455    899800    
1213839489404040

在上面的示例行中,我们可以看到在位置4-10之间有空空间。要检查的位置是固定的。我希望能够检查我的文件中的每一行在位置4-10之间是否都有空空格,如果有空空间,我希望能够用0替换它。我在文件中提供了以下所需的输出。

代码语言:javascript
运行
复制
#desired output in the input.txt

0140000000789000    # note that 0 has been added in the position 4-10
2344550000899800    # # note that 0 has been added in the position 7-10
1213839489404040

我能够在下面的代码中执行以下操作。下面的代码只能使用sed命令在指定位置添加值,我希望能够修改这段代码,以便它能够完成上述任务。

有人能帮帮我吗?

我的守则:

代码语言:javascript
运行
复制
#append script
function append_vals_to_line {
    insert_pos=$(($1 - 1))
    sed -i 's/\(.\{'$insert_pos'\}\)/\1'$2'/' "$3"
}

column_num_to_insert="$1"
append_value ="$2"
input_file_to_append_vals_in ="$3"

append_vals_to_line "$column_num_to_insert" "$append_value" "$input_file_to_append_vals_in"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-01 15:31:16

为此,我建议了一个awk解决方案:

代码语言:javascript
运行
复制
awk '{s = substr($0, 4, 7); gsub(/ /, 0, s); print substr($0, 1, 3) s substr($0, 11)}' file

#input.txt

0140000000789000
2344550000899800
1213839489404040

一个更易读的版本:

代码语言:javascript
运行
复制
awk '{
   s = substr($0, 4, 7)
   gsub(/ /, 0, s)
   print substr($0, 1, 3) s substr($0, 11)
}' file

该命令首先在变量s中从第4位到第10位获得一个子字符串。然后使用gsub将每个空格替换为一个0,最后重新组合和打印整条线。

考虑从参数获取开始和结束位置的awk命令:

代码语言:javascript
运行
复制
awk -v p1=4 -v p2=10 '{
   s = substr($0, p1, p2-p1+1)
   gsub(/ /, 0, s)
   print substr($0, 1, p1-1) s substr($0, p2+1)
}' file
票数 2
EN

Stack Overflow用户

发布于 2022-02-01 17:22:58

你可以:

代码语言:javascript
运行
复制
awk '
/[[:blank:]]/{
    sub(/[[:blank:]]*$/,"")   # remove trailing spaces if any
    gsub(/[[:blank:]]/,"0")   # replace each /[[:blank:]]/ with "0"
} 1' file

或者,你可以这样做:

代码语言:javascript
运行
复制
awk '
length($2) {
    $0=sprintf("%s%0*d",$1,16-length($1),$2)
} 1' file   

任何一种指纹:

代码语言:javascript
运行
复制
0140000000789000
2344550000899800
1213839489404040
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70943079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档