代码之家  ›  专栏  ›  技术社区  ›  justaguy

awk将匹配上的字段更改为另一个字段

awk
  •  0
  • justaguy  · 技术社区  · 5 年前

    在下面,我试图更新/更改 $1 在里面 f2 $2 属于 $1 属于 f1 f2层 $1 值保持不变。谢谢:)。

    awk 'FNR==NR { a[$1]=$2; next } { if(a[$2]){$1=a[$2] }; print }' OFS="," 
    
    gawk '{
        if(NR==FNR){
                a[$1]=$2;
                next
        }
        if($2 in a){
                $1=a[$2];
                print $0
        }
         else {
                print $0
        }
    }' OFS="," f1 f2
    

    f1层 tab-delimited

    file1   header
    xxxx:7230   aaa11
    xxxx:7231   yyyyy
    xxxx:25478  zzzz
    

    comma-delimited

    header1
    header2
    aaa11c,xxxx:7230,111,x1 111,yes
    yyyyy,xxxx:7325,222,x2 222,
    zzzz,xxxx:7329,222,x3 333,
    

    header1
    header2
    aaa11,xxxx:7230,111,x1 111,yes
    yyyyy,xxxx:7325,222,x2 222,
    zzzz,xxxx:7329,222,x3 333,
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Ed Morton    5 年前

    主要是您忘记了为每个文件设置FS:

    awk 'NR==FNR{a[$1]=$2; next} $2 in a{$1=a[$2]} 1' FS='\t' file1 FS=',' OFS=',' file2