Déposer ou supprimer une colonne avec awk

Je voulais laisser tomber les trois premières colonnes.

Ceci est mes données;

DETAIL 02032017 Name Gender State School Class AM Melaka SS D BM Johor BB E CF Pahang AA F EOF 3 

Je veux mes données comme ceci:

 DETAIL 02032017 School Class SS D BB E AA F EOF 3 

C’est ma commande actuelle que j’obtiens mon commandecommande:

 awk -v date="$(date +"%d%m%Y")" -F\| 'NR==1 {h=$0; next} {file="TEST_"$1"_"$2"_"date".csv"; print (a[file]++?"": "DETAIL"date"" ORS h ORS) $0 > file} END{for(file in a) print "EOF " a[file] > file}' testing.csv 

Quelqu’un peut-il m’aider?

Je vous remercie 🙂

Je veux supprimer les trois premières colonnes

Si vous souhaitez simplement supprimer les trois premières colonnes, vous pouvez simplement les définir sur des chaînes vides, en laissant seules celles qui ne comportent pas trois colonnes, par exemple:

 awk 'NF>=3 {$1=""; $2=""; $3=""; print; next}{print}' 

Cela a la fâcheuse habitude d’avoir toujours les séparateurs de champs entre ces champs vides mais, comme la modification des colonnes reformatera de toute façon la ligne, je suppose que ça va:

 DETAIL 02032017 School Class SS D BB E AA F EOF 3 

Si awk est le seul outil utilisé pour les traiter, l’espacement n’aura aucune importance. Si vous souhaitez conserver la mise en forme (ce qui signifie que les colonnes se trouvent à des emplacements très spécifiques sur la ligne), vous pouvez simplement obtenir une sous-chaîne de la ligne entière:

 awk '{if (NF>=3) {$0 = substr($0,25)}; print}' 

Comme cela ne modifie pas les champs individuels, cela ne déclenchera pas un recalcul de la ligne qui changerait de format:

 DETAIL 02032017 School Class SS D BB E AA F EOF 3