我有一个大文件,大约有 200,000 列和大约 5000 行。 下面是该文件的简短示例,其中重复了第 1 列和第 5 列。
Abf Bgj Csd Daa Abf Efg ...
0 1 2 1 0 1.1
2 0.1 1.2 0.3 2 1
...
这是我需要的结果的示例。已删除原始文件中的第 5 列。
Abf Bgj Csd Daa Efg ...
0 1 2 1 1.1
2 0.1 1.2 0.3 1
...
某些列重复多次。 我需要使用 bash 工具从数据中删除重复项(保留第一个实例(。 我无法对数据进行排序,因为我需要保持顺序。
$ cat tst.awk
NR==1 {
for (i=1;i<=NF;i++) {
if (!seen[$i]++) {
f[++nf]=i
}
}
}
{
for (i=1;i<=nf;i++) {
printf "%s%s", $(f[i]), (i<nf?OFS:ORS)
}
}
$ awk -f tst.awk file | column -t
Abf Bgj Csd Daa Efg
0 1 2 1 1.1
2 0.1 1.2 0.3 1
您可以使用datamash
程序:
datamash -W transpose < input.txt | datamash rmdup 1 | datamash transpose
GNU datamash 是一个命令行程序,它执行基本的 对输入文本数据进行数字、文本和统计操作 文件。
解释:
datamash -W transpose < input.txt
- 转置- 交换行和列。行现在是列,列是行。
- -W- 使用空格(一个或多个空格和/或制表符(作为字段分隔符。
datamash rmdup 1
- 按第一列值删除重复行datamash transpose
- 交换回行和列
输入
Abf Bgj Csd Daa Abf Efg
0 1 2 1 0 1.1
2 0.1 1.2 0.3 2 1
输出
Abf Bgj Csd Daa Efg
0 1 2 1 1.1
2 0.1 1.2 0.3 1