从文件打击工具中删除列



我有一个大文件,大约有 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 是一个命令行程序,它执行基本的 对输入文本数据进行数字、文本和统计操作 文件。

解释:

  1. datamash -W transpose < input.txt
    • 转置- 交换行和列。行现在是列,列是行。
    • -W- 使用空格(一个或多个空格和/或制表符(作为字段分隔符。
  2. datamash rmdup 1- 按第一列值删除重复行
  3. 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

最新更新