我有大量单独的文件,每个文件包含六列(行数可能会有所不同)。作为一个简单的例子:
1 0 0 0 0 0
0 1 1 1 0 0
Run Code Online (Sandbox Code Playgroud)
我试图确定我有多少个唯一列(即数字和它们的顺序匹配),在这种情况下它将是 3。
有没有一个简单的单线来做到这一点?我知道将一列与另一列进行比较很容易,但如何找到相同的列?
您可以使用以下管道计算唯一列:
$ 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 默认使用空白非空白字段分隔。