删除 unix 中的重复列

deleting repetitive columns in unix

我想从一个巨大的文件(大约 100 万)中删除多个重复的列。 我要删除的列具有相同的列名:A 和其他列具有不同的唯一名称。说:

A​​ B2 A B3

1.1 AA 1.2 AA

2.1 AB 4.3 CT

2.2 AC 6.4 GT

所以第 headers 列是 A、B2、A、B3、...。 如何从数据中删除名为 A 的列。

我不确定我是否正确理解了你的问题,但这里有一个 (GNU) awk 解决方案来删除所有重复的列(只保留第一次出现的列):

#!/usr/bin/awk -f

NR==1 {
    seen[] = 1
    cols[0] = 1
    for (i=2; i<=NF; i++) {
        if (!($i in seen)) {
            seen[$i] = 1
            cols[length(cols)] = i
        }
    }
}

{
    for (i=0; i<length(cols); i++)
        printf $(cols[i]) " "
    printf "\n"
}

对于第一行(NR==1),我们找到所有不重复的列(保留顺序),对于所有其他行,我们只打印出我们之前选择的列(字段)( cols 数组包含 column/field 个我们希望保留的索引)。

$ ./filter.awk file
A B2 B3 
1.1 AA AA 
2.1 AB CT 
2.2 AC GT 

awk 中的另一个:

$ awk '
NR==1 {
    split([=10=],a)
    for(i in a)
        if(a[i]=="A")
            delete a[i]
}
{
    for(i=1;i<=NF;i++)
        printf "%s",(i in a?$i OFS:"")
    printf ORS
}' file
B2 B3 
AA AA 
AB CT 
AC GT 
cut -d' ' -f $(head -1 filename|tr ' ' '\n'|awk '{if(!seen[[=10=]]++) print NR}'|paste -s -d ',') filename

这会很有用。

James Brown 代码解决了这个问题。

我加了

!/usr/bin/awk -f

到他的代码的第一行并更正代码末尾的小拼写错误(只需添加 -'- 删除)。

抱歉,我没有时间尝试所有其他建议

送上我最美好的祝福