使用 awk 识别数量相同的列

Sar*_*rah 6 awk columns

我有大量单独的文件,每个文件包含六列(行数可能会有所不同)。作为一个简单的例子:

1   0   0   0   0   0

0   1   1   1   0   0
Run Code Online (Sandbox Code Playgroud)

我试图确定我有多少个唯一列(即数字和它们的顺序匹配),在这种情况下它将是 3。

有没有一个简单的单线来做到这一点?我知道将一列与另一列进行比较很容易,但如何找到相同的列?

max*_*zig 8

您可以使用以下管道计算唯一列:

$ awk '{for (i=1; i<=NF; ++i) a[i]=a[i]$i; } END { for (i in a) print a[i] }' foo \
  | sort -u | wc -l
Run Code Online (Sandbox Code Playgroud)

awk 命令转置您的输入,对结果行进行排序,仅保留唯一行 ( -u),最后计算所有(唯一)行(即转置列)(wc -l)。

请注意,这NF是一个内置的 awk 变量,并自动设置为当前记录中的字段数。$i引用第 i 个字段并END保护接下来的块,以便在处理完所有记录后执行它。awk 默认使用空白非空白字段分隔。