删除带有字符串匹配bash的列

删除带有字符串匹配bash的列,bash,awk,sed,Bash,Awk,Sed,我遇到了以下问题 我需要删除文件中标题中包含特定字符串的列。 分号用作列限制 下面的例子 file 1 ADM_THO_CVL2000,ZO,AT;BS-CCI-BAL,ARA,EL;BS-TLI-MS,ARA,BG; 1;2;3; 4;5;6; file 2 BS-CCI-BAL,ARA,EL;BS-TLI-MS,ARA,BG;ADM_THO_CVL2000,OZ,ES;BAG-AL,W,SE; 1;2;3;5; 4;5;6;7; ADM_thou_CVL2000是我需要删除的特定字符

我遇到了以下问题

我需要删除文件中标题中包含特定字符串的列。 分号用作列限制

下面的例子

file 1
ADM_THO_CVL2000,ZO,AT;BS-CCI-BAL,ARA,EL;BS-TLI-MS,ARA,BG; 
1;2;3;
4;5;6;


file 2
BS-CCI-BAL,ARA,EL;BS-TLI-MS,ARA,BG;ADM_THO_CVL2000,OZ,ES;BAG-AL,W,SE;
1;2;3;5;
4;5;6;7;
ADM_thou_CVL2000
是我需要删除的特定字符串。删除字符串和后续列后,结果如下:

BS-CCI-BAL,ARA,EL;BS-TLI-MS,ARA,BG; 
2;3;
5;6;

BS-CCI-BAL,ARA,EL;BS-TLI-MS,ARA,BG;BAG-AL,W,SE;
1;2;5;
4;5;7;
我在网上看了一下

awk
可以完成我想要的工作,但我现在得到的结果并不是我所期望的。我给你的代码如下:

awk '
FNR==1{
    for(i=1;i<=NF;i++)
        if ($i ~ str) {
          h=(h)?h FS $i:$i
          f=(f)?f FS i:i
        }
    print h
    nf=split(f,fA,FS);next
 }
 {
 for(i=1;i<=nf;i++)
       printf("%s%c",$fA[i], (i==nf)?ORS:FS)
}' str=ADM_THO_CVL2000, 'FS=;' filename.csv
awk'
FNR==1{

对于(i=1;i您需要在我以前的解决方案中进行一些增强。由于您无法解决此问题,我将发布我的答案:

awk -F';' '/ADM_THO_CVL2000/{delete a; for (i=1; i<NF; i++) 
   if ($i ~ /ADM_THO_CVL2000/) a[i]; else printf "%s%s", $i, OFS; print $i; next} 
   {for (i=1; i<NF; i++) if (!(i in a)) printf "%s%s", $i, OFS; print $i }' OFS=';' file

file 1
BS-CCI-BAL,ARA,EL;BS-TLI-MS,ARA,BG;
2;3;
5;6;    

file 2
BS-CCI-BAL,ARA,EL;BS-TLI-MS,ARA,BG;BAG-AL,W,SE;
1;2;5;
4;5;7;

awk-F';''/ADM_thou CVL2000/{删除a;for(i=1;好吧。似乎是学校练习。几个小时前问了完全相同的问题。我什么都找不到,德夫努尔:)@Ashkhan:检查你的答案。你所有的输入都是从1个文件中删除的2个块,还是打算成为2个可能的输入文件?这很重要……嗨,Ed,这是2个输入文件。@Ashkan我用了anubhava的答案,但我不能用它作为我的字符串…为这一个干杯@anubhava。不,这次我自己没想到那一个。谢谢再一次。不客气,很高兴你成功了。你知道,我觉得自己很笨,但实际上,我是说,我觉得自己很笨,因为你和其他人都很有学识。我只是希望通过将你在这里教我的东西传递给其他人,我正在做大量的工作。很抱歉你的小吼叫,只是在你尝试这样做的时候感觉到了苦工的负担o处理你以前没有处理过的问题和做事方式。再次干杯。别担心,安迪。只是建议你尝试发帖(即使它不起作用)这会让你的问题更受欢迎,因为它会吸引更多的答案。谢谢阿努巴瓦。你真是太好了。事实上,让我把我的话发出来。这可能会帮助其他人。