bash - Bash:我如何(1)从包含一列数字的文件中的“i”行中读取一个数字,以及(2)将值分配给一个变量?
问题描述
我设置了一个 sed 表达式,它在文件中查找旧数字并将其替换为新数字。我对此没有任何问题。
我有很多文件。对于每个文件i,新数字需要来自另一个文件中一列数据的第i行(我们称之为“newNumbers”),如下例所示。
1.2345 10.6789 100.101112 ...
- 我可以这样做(在文件(i)的for循环内):
i = 1 while read line do var[$i]="$line" find ... # My sed expression for finding and replacing a word in file (i). i=$((i+1)) done < newNumbers
但是,这不是一个好的解决方案。“newNumbers”太长了,需要几天时间。我从“newNumbers”中知道我需要的那一行。它是第i行,对应于文件i。所以我想从第i行的“newNumbers”中读取值。我无法获得正确的语法来执行此操作(我没有使用 bash 的经验)。我在 Mac 上使用 GNU sed 并检查了几个似乎与此处相关的问题。导致“char1:缺少命令”或“iq;d”:命令需要 \ 后跟文本类型错误的示例是:
gsed -n -e "${i}" newNumbers
gsed 'iq;d' newNumbers
gsed "${i}q;d" newNumbers
我不知道这是 Mac 问题(GNU sed)还是语法问题。感谢您的任何帮助。
解决方案
这是有效的,但我不知道为什么!我会发布它,因为在处理输入和输出文件时可能还有其他人需要处理这个问题。
在我的 for 循环文件 i 中,从 0 开始,
j=$((i+1))
newNumber_i=$(gsed "${j}q;d" newNumbers)
echo ${i%}
我需要“回声”声明。我是从 ghostdog74 的回复中得到的: 如何将 sed 的输出读取到变量中
推荐阅读
- asp.net-core - 如何为现有数据库用户配置 IdentityServer4 并使用声明填充令牌
- elasticsearch - 如何在 Hibernate 搜索中搜索也匹配过滤器的查询结果
- php - Facebook 广告 API 尝试连接错误 - (不支持的获取请求。ID 为“act_”的对象)
- grafana - 通过 Grafana 接口关闭 Zabbix 问题?
- java - 在 Java Rundeck 插件中使用 jar 添加依赖项
- pandas - 在 pandas 中使用双字符串标题重塑数据
- godot - 使用单例更改另一个节点的颜色
- python - PySpark:基于公共字符串列比较两个数据框并生成结果布尔 withColumn()
- java - 将 Spring 批处理连接到 Spring 集成工作流
- java - 创建子类或将类型设置为字符串?