组合文件中的每两列值

组合文件中的每两列值

我有一个文件(只有一行)有多列,例如 4(在本例中):

A B C D

我希望输出为每次取 2 个列值的每种可能的组合,例如:

AB 
AC
AD
BC
BD
CD

其中ABBA是等价的。我已经尝试过代码:sed 's! \([^ ]\+\)\( \|$\)!\1 !g' <file_name>但它给出的输出为AB CD.

请建议如何使用awk任何 shell 命令来执行此操作。

答案1

awk

awk '{for(i=1;i<=NF;i++){for(j=i+1;j<=NF;j++){print $i$j;}}}' file

这是两个嵌套for循环:

  • for(i=1;i<=NF;i++)循环遍历所有字段
    • for(j=i+1;j<=NF;j++)然后对于每个字段,循环遍历所有剩余字段(从 开始i+1
    • print $i$j打印两个字段值。

输出:

AB
AC
AD
BC
BD
CD

相关内容