我遇到了以下问题。
我需要删除文件中包含标题中特定字符串的列。 分号作为列限制
以下示例
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_THO_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
我全心全意为你提出任何建议。
干杯
答案 0 :(得分:1)
我之前的解决方案需要一些增强功能。由于你无法解决它,我发布了我的答案:
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;