我有一个文件(只有一行)有多列,例如 4(在本例中):
A B C D
我希望输出为每次取 2 个列值的每种可能的组合,例如:
AB
AC
AD
BC
BD
CD
其中AB
和BA
是等价的。我已经尝试过代码: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