si j'ai un fichier CSV dans le format suivant:
column1,column2,column3,column4,column5,column6,column7,column8
et je veux awk
_ Imprimer uniquement les colonnes 2 jusqu'à 7 J'utiliserais:
awk -F',' '{print $2 "," $3 "," $4 "," $5 "," $6 "," $7}' file.csv
et obtenir:
column2,column3,column4,column5,column6,column7
existe-t-il un moyen de concaténer les colonnes 2-7 pour simplifier la commande. Comme je pense à un fichier avec un peu plus de colonnes, ma commande awk
deviendrait horriblement longtemps.
$ awk -v b=2 -v e=7 'BEGIN{FS=OFS=","} {for (i=b;i<=e;i++) printf "%s%s", $i, (i<e ? OFS : ORS)}' file
column2,column3,column4,column5,column6,column7
b = numéro de champ de début, e = numéro de champ de fin. Si vous avez besoin de gérer les CSV avec des champs indiqués, des virgules intégrées, des nouvelles lignes, etc. puis voir https://stackoverflow.com/q/45420535/1745001 .
La coupe utilitaire a une notation compacte:
cut -d, -f2-7 <input-file>
produire:
colonne2, colonne3, colonne4, colonne5, colonne6, colonne7
sed -e '
s/,/\n/7 ;# tag the end of col7
s/^/,/ ;# add a comma
s/,/\n/2 ;# tag beginning of col2
s/.*\n\(.*\)\n.*/\1/ ;# perform surgery
' file.csv
Résultats :
column2,column3,column4,column5,column6,column7
Testé avec la commande ci-dessous et ça a fonctionné bien
awk -F "," 'OFS=","{$1="";$NF="";print $0}' o| sed "s/^,//g"|sed "s/,$//g"
sortir
column2,column3,column4,column5,column6,column7