【问题标题】:replace string in a file with value from another file用另一个文件中的值替换文件中的字符串
【发布时间】:2012-10-26 02:13:42
【问题描述】:

我有两个文件。其中一个定义了一组数值对,如下所示(fileA):

 1  asm
 2  assert
 3  bio
 4  bootasm
 5  bootmain
 6  buf
 7  cat
 8  console
 9  defs
10  echo

另一个文件包含一堆值对,如下(fileB):

bio types
bio defs
bio param
bio spinlock
bio buf
bootasm asm
bootasm memlayout
bootasm mmu
bootmain types
bootmain elf
bootmain x86
bootmain memlayout
cat types
cat stat
cat user

我想编写一个脚本,将文件 B 中的值替换为文件 A 中对应的数字。 不管是生成新文件还是更改现有文件B都没有关系。

有什么想法吗? 谢谢

【问题讨论】:

    标签: linux shell unix sed awk


    【解决方案1】:
    awk 'NR==FNR{a[$2]=$1;next}{$1=a[$1];}1' fileA fileB
    

    NR==FNR{a[$2]=$1;next} => 处理文件 A 时为真。形成一个关联数组,其中索引为第 2 列,第 1 列为其值。

    {$1=a[$1];} => 处理第二个文件时,将第一列替换为存储在数组中的适当值。

    1 => 打印每一行。

    【讨论】:

      【解决方案2】:

      这可能对你有用(GNU sed):

      sed 's|^\s*\(\S*\)\s*\(.*\)$|/^\2\\>/s//\1/|' fileA | sed -f - fileB
      

      【讨论】:

        【解决方案3】:

        请注意,如果您在 fileB 第一列中有未定义的字符串,@Guru 的解决方案将不起作用,例如:

        文件B

        ...
        name user
        name system
        

        将输出:

        ...
         user
         system
        

        在这种情况下,字符串“name”将被截断。如果所有行都匹配,则可以正常工作。

        【讨论】:

          猜你喜欢
          • 2019-03-21
          • 2011-07-01
          • 1970-01-01
          • 2018-05-19
          • 2012-08-18
          • 1970-01-01
          • 2021-04-18
          • 2017-05-18
          • 2016-05-23
          相关资源
          最近更新 更多