【问题标题】:On the basis of 1st column print both the file在第一列的基础上打印两个文件
【发布时间】:2019-12-19 18:54:47
【问题描述】:

我有两个包含多行的文件。 第一个文件有 2 个列,第二个文件有 2000 多个列。 示例数据集是:

示例文件_1

car Maruti
car TATA
car Hyundai
car Jaguar
Jeep Mahindra

示例文件_2

car  A B C D E F G
Jeep X Y Z W Q W K

我试过了

awk '{a[$1]=a[$1]" "$0} ++n[$1]==2{print a[$1]}' File_2 File_1

此命令的输出仅打印一次数据,并且不是以完美的顺序打印的。我得到了以下结果:

car  A B C D E F G car Maruti
Jeep X Y Z W Q W K Jeep Mahindra

基于第一个文件的预期输出是:

car  Maruti    car  A B C D E F G
car  TATA      car  A B C D E F G
car  Hyundai   car  A B C D E F G
car  Jauar     car  A B C D E F G
Jeep Mahindra  Jeep X Y Z W Q W K

【问题讨论】:

  • 输出是否必须完全按照该顺序,或者排序后的输出也可以接受?
  • 两种输出都可以接受。

标签: awk sed


【解决方案1】:

请您尝试关注一下。

awk 'FNR==NR{a[$1]=$0;next} ($1 in a){print $0,a[$1]}'  file2 file1 | column -t

输出如下。

car   Maruti    car   A  B  C  D  E  F  G
car   TATA      car   A  B  C  D  E  F  G
car   Hyundai   car   A  B  C  D  E  F  G
car   Jaguar    car   A  B  C  D  E  F  G
Jeep  Mahindra  Jeep  X  Y  Z  W  Q  W  K

【讨论】:

    【解决方案2】:

    在这里使用join 命令会更容易,该命令专门用于像您这样的任务。但是,join 需要排序文件,所以我们先排序。

    使用bash 可以就地完成排序

    join <(sort 1stFile) <(sort 2ndFile)
    

    使用普通的 posix shell (sh) 你必须使用临时文件

     sort 1stFile > 1stFileSorted
     sort 2ndFile > 2ndFileSorted
     join 1stFileSorted 2ndFileSorted
     rm 1stFileSorted 2ndFileSorted
    

    要对齐输出中的列,您可以使用join … | column -t

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2018-10-07
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多