Comment puis-je supprimer certaines colonnes d'un fichier de champs séparés par des tabulations avec awk
?
c1 c2 c3 ..... c60
Par exemple, supprimez les colonnes entre 3 et 29.
Voici à quoi sert la commande cut
:
cut -f1,2,30- inputfile
La valeur par défaut est tab. Vous pouvez changer cela avec le -d
commutateur.
Vous pouvez parcourir toutes les colonnes et filtrer celles que vous ne voulez pas:
awk '{for (i=1; i<=NF; i++) if (i<3 || i>29) printf $i " "; print""}' input.txt
où NF
vous donne le nombre total de champs dans un enregistrement.
Pour chaque colonne qui remplit la condition, nous imprimons la colonne suivie d'un espace " "
.
EDIT: mis à jour après une remarque de johnny:
awk -F 'FS' 'BEGIN{FS="\t"}{for (i=1; i<=NF-1; i++) if(i<3 || i>5) {printf $i FS};{print $NF}}' input.txt
ceci est amélioré de 2 manières:
awk '{for(z=3;z<=15;z++)$z="";$0=$0;$1=$1}1'
Contribution
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21
Production
c1 c2 c16 c17 c18 c19 c20 c21
Solution "d'épissage" Perl qui n'ajoute pas d'espace blanc de début ou de fin:
Perl -lane 'splice @F,3,27; print join " ",@F' file
Produit une sortie:
c1 c2 c30 c31