【问题标题】:Create all combinations of a single column from a file into two columns using awk or shell script or python使用 awk 或 shell 脚本或 python 将文件中的单个列创建为两列的所有组合
【发布时间】:2016-06-17 10:49:18
【问题描述】:

我有一个包含如下机场代码的文件

ATQ 
HYD 
BLR
GOI 
AMD
CCJ
TRV

从同一个文件中,我必须在 gawk 中创建如下所示的源目标映射。

 src dest
 ATQ HYD
 ATQ BLR
 ATQ GOI
 ATQ AMD
 ATQ CCJ
 ATQ TRV
 HYD ATQ
 HYD BLR
 HYD AMD
 ....
 ...

谁能帮帮我,提前谢谢

【问题讨论】:

  • 你错过了尝试
  • 我不明白您打算如何将源映射到目标。它只是所有可能组合的列表吗?
  • 它只是为现有机场代码值创建路线组合
  • @Chethu:提供您对所提供答案的观察,以便人们进一步帮助您

标签: python shell awk


【解决方案1】:

一个简单的awk 脚本可以做到这一点。只需将行的所有元素存储在数组中,并为每个其他元素的每个元素运行一个循环,而没有没有意义的重复。

$ awk 'BEGIN {printf("%s\t%s\n" ,"src", "dest")}
  {
      line[++c] = $1
  }
  END {
      for ( i = 1; i <= c; i++ )
      {
          for ( j = 1; j <= c; j++ )
          {
              if (line[i] != line[j]) { printf("%s\t%s\n",line[i],line[j]) }
          }
       }
  }
' file

将输出,

src     dest
ATQ     HYD
ATQ     BLR
ATQ     GOI
ATQ     AMD
ATQ     CCJ
ATQ     TRV
HYD     ATQ
HYD     BLR
HYD     GOI
HYD     AMD
HYD     CCJ
HYD     TRV
BLR     ATQ
BLR     HYD
BLR     GOI
BLR     AMD
BLR     CCJ
BLR     TRV
GOI     ATQ
GOI     HYD
GOI     BLR
GOI     AMD
GOI     CCJ
GOI     TRV
AMD     ATQ
AMD     HYD
AMD     BLR
AMD     GOI
AMD     CCJ
AMD     TRV
CCJ     ATQ
CCJ     HYD
CCJ     BLR
CCJ     GOI
CCJ     AMD
CCJ     TRV
TRV     ATQ
TRV     HYD
TRV     BLR
TRV     GOI
TRV     AMD
TRV     CCJ

【讨论】:

    【解决方案2】:

    一个班轮:

     echo "src dest"; cat /tmp/air | while read s; do for d in `cat /tmp/air`; do if [ $s != $d ]; then echo $s $d; fi; done; done
    

    将输出:

    src dest
    ATQ HYD
    ATQ BLR
    ATQ GOI
    ATQ AMD
    ATQ CCJ
    ATQ TRV
    HYD ATQ
    HYD BLR
    HYD GOI
    HYD AMD
    HYD CCJ
    HYD TRV
    BLR ATQ
    BLR HYD
    BLR GOI
    BLR AMD
    BLR CCJ
    BLR TRV
    GOI ATQ
    ...
    

    【讨论】:

      【解决方案3】:

      假设您的机场列表在 a.txt 文件中的 bash 版本:

      echo "src dest";
      for src in `cat a.txt`; do
          for dest in `cat a.txt`; do
              if [ $src != $dest ]; then
                  echo "$src $dest";
              fi
          done;
      done
      

      【讨论】:

      • 这也会打印'ATQ ATQ'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2020-08-30
      相关资源
      最近更新 更多