python - 如何在 awk/sed/python 中用另一行替换一行的一个字段?

标签 python regex bash awk sed

输入.txt

A(0,1,2)
...
B(A,3)
...
C(B,4,5)

如果一个函数的第一个参数不等于0但对应于一个函数名,我想用所有相应函数的参数替换它(例如用所有参数替换上面函数B中的第一个参数'A'功能 A)。也就是期待

输出.txt

A(0,1,2)
...
B(0,1,2,3)
...
C(0,1,2,3,4,5)

我们如何使用 awk/sed 或 python 做到这一点?

编辑:

我的一个想法是将函数名称存储为变量,并将其参数存储为 bash 中的值。在 python 中,我们可能会使用 dict,将函数名视为键,将其参数视为值。实现起来并不容易。

最佳答案

awk -F'[()]' '
    $2 !~ /^0,/ {
        split($2, a, /,/)
        sub(/^[^,]+/, val[a[1]], $2)
    } 
    {
        val[$1] = $2
        print $1 "(" $2 ")"
    }
' input.txt > output.txt

其中sub(/^[^,]+/, val[a[1]], $2)用于匹配$2中的第一个参数并替换它具有 val[a[1]] 的值,该值由前面几行的 val[$1] = $2 的执行定义。

关于python - 如何在 awk/sed/python 中用另一行替换一行的一个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26769145/

相关文章:

c# - 获取模式之后没有类或 ID 的文本

python - alembic 迁移后命令

python - 如何从许多 csv 文件中提取特定数据并将其放入 python 中的新单个 csv 中

python - 将数组从 MATLAB 转换为 numpy

r - 如何使用 R 在大字符串中提取模式(开始和结束)?

bash - 易于并行化

python - 连接到服务器上运行的 virtualenv/django 时如何解决 ERR_CONNECTION_REFUSED

python - 用正则表达式查找多个字符串

bash - 递归读取文件夹并对每个文件夹执行命令

linux - 如何为 EBS 支持的实例找到允许我连接的 AWS AMI 镜像