gpt4 book ai didi

bash - 如何将存储值作为列号参数传递以在 awk 中进行编辑?

转载 作者:行者123 更新时间:2023-12-02 09:27:52 25 4
gpt4 key购买 nike

我有一个带有 | 分隔符的 .dat 文件,我想更改由作为参数传递并存储在 var 中的数字定义的列的值。我的代码是

awk -v var="$value" -F'|' '{ FS = OFS = "|" } $1=="$id" {$"\{$var}"=8}1'   
myfile.dat > tmp && mv tmp myfiletemp.dat

这将整行更改为 8,显然不起作用。我想知道写这部分的正确方法是什么
{$"\{$var}"=8}1

例如,如果我想将第四列更改为 8 并且我有 value=4 ,我如何获得 {$4=8}

最佳答案

另一个答案大部分是正确的,但只是想添加几个注释,以防不完全清楚。

  • 引用前面带有 $ 的变量会将其转换为对列的引用。所以 i=3; print $i; print i 将打印第三列,然后是数字 3。
  • 将所有变量放在命令行中将避免尝试将 bash 变量包含在单引号 awk 代码中的任何问题,这将不起作用。
  • 可以让 awk 输出到特定文件,而不是依赖 bash 来重定向输出和移动文件。
  • 命令行上的 -F 选项为您指定 FS,因此无需在您的代码中重新声明它。

  • 这是我将如何做到这一点:
    #!/bin/bash
    column=4
    value=8
    id=1
    awk -v col="$column" -v val="$value" -v id="$id" -F"|" '
    BEGIN {OFS="|"}
    {$1==id && $col=val; print > "myfiletemp.dat"}
    ' myfile.dat

    关于bash - 如何将存储值作为列号参数传递以在 awk 中进行编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36092641/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com