linux - 将一个文件中的值替换为 linux 中另一个文件中的值

标签 linux

我一整天都在想办法解决这个问题。任何帮助将不胜感激。

fileA 有以下数据。

a bal=45
b bal=40
c bal=55
d bal=65

fileB 有以下内容

a type ppm func,bal=#,oth,new
b type ppm,bal=#,oth,new
c type ppm func,bal=#,oth,new
d type ppm,bal=#,oth,new

我试图找到一种方法,通过匹配两个文件的第一列,将文件 B 中的 bal=# 替换为文件 A 中的值 bal=XX。

输出看起来像:

a type ppm func,bal=45,oth,new
b type ppm,bal=40,oth,new
c type ppm func,bal=55,oth,new
d type ppm,bal=65,oth,new

fileB 由空格和逗号分隔,并且 b=# 所在的列对于所有行而言都不同。

最佳答案

使用awk:

$ awk -v OFS="," 'NR==FNR{a[$1]=$2;next}{split($1,t,/ /);$2=a[t[1]]}1' fileA FS="," fileB
a type ppm func,bal=45,oth,new
b type ppm,bal=40,oth,new
c type ppm func,bal=55,oth,new
d type ppm,bal=65,oth,new

我们将输出字段分隔符设置为,。我们使用 NR==FNRnext 构造将文件 A 读入数组 a,其中键为 column1,值为 column2。加载文件后,我们转到第二个文件。我们使用 split 函数拆分空间的第一列。我们将第二列设置为数组中的值,并使用 1 打印该行,默认情况下打印该行。

请注意,我们将第二个文件的输入字段分隔符设置为 ,,方法是将其放在最后的文件名之前。

关于linux - 将一个文件中的值替换为 linux 中另一个文件中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756682/

相关文章:

python - bash 脚本在启动另一个相同的 python 脚本后杀死 python 脚本

linux - tasklet 在 ISR 调度后究竟何时运行?

linux - mod_perl2 脚本中的某些二进制文件可以运行,而其他二进制文件则不能运行(尽管有 ls 可见性和 +x)

node.js - Webpack 内存不足

linux - docker 。 docker-compose up后在容器中创建目录并赋予其r/w权限

linux - 如何在 unix shell 脚本中将时间添加到日期?

linux - 为什么无法删除文件?

linux - Grep-ing 不可搜索的文件

java - hadoop 关于如何处理日志的建议

linux - dotnet-install.sh 不在 Ubuntu 上添加 dotnet 命令