web-dev-qa-db-fra.com

Awk - Gamme d'impression de colonnes

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.

4
nath
$ 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 .

3
Ed Morton

La coupe utilitaire a une notation compacte:

cut -d, -f2-7 <input-file>

produire:

colonne2, colonne3, colonne4, colonne5, colonne6, colonne7

8
drl
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
2
Rakesh Sharma

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
0
Praveen Kumar BS