我想从一个巨大的文件中删除多个重复列(大约一百万)。 我要删除的列具有相同的列名:A和其他列具有不同的唯一名称。说:
A B2 A B3
1.1 AA 1.2 AA
2.1 AB 4.3 CT
2.2 AC 6.4 GT
所以列标题是A,B2,A,B3,.... 如何从数据中删除名为A&#39的列。
答案 0 :(得分:0)
我不确定我是否正确理解了您的问题,但这里有一个(GNU)awk
解决方案来删除所有重复的列(仅保留第一次出现):
#!/usr/bin/awk -f
NR==1 {
seen[$1] = 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
),我们找到所有非重复列(保留顺序),对于所有其他行,我们只打印出之前选择的列(字段)({{ 1}}数组保存我们希望保留的列/字段索引。
cols
答案 1 :(得分:0)
awk中的另一个人:
$ awk '
NR==1 {
split($0,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
答案 2 :(得分:0)
cut -d' ' -f $(head -1 filename|tr ' ' '\n'|awk '{if(!seen[$0]++) print NR}'|paste -s -d ',') filename
这将像魅力一样工作。
答案 3 :(得分:-1)
问题由詹姆斯布朗代码解决。
我添加了
到他的代码的第一行,并在代码末尾修正微小的拼写错误(只是附加 - ' - 删除)。
对不起,我没有时间尝试所有其他建议
抱着我的祝福