使用awk、shell脚本或python将文件中的一列的所有组合创建为两列

2024-05-08 00:41:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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
 ....
 ...

有人能帮我吗,提前谢谢


Tags: 文件代码src目标dest机场amdgoi
3条回答

bash中的版本,假设机场列表位于a.txt文件中:

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

一行:

 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
...

一个简单的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

相关问题 更多 >