Troque duas colunas em um CSV usando o SED

3

Eu tenho um arquivo CSV que contém 10 campos diferentes ( , é o deliminador). Exemplo de dados:

student-id,last,first,hwk1,hwk2,hwk3,exam1,hwk4,hwk5,exam2
pts-avail,,,100,150,100,200,150,100,300
991-78-7872,Thompson,Ken,95,143,79,185,135,95,259

Eu preciso trocar field2 e field3 usando sed , mas tendo dificuldade em entender como escrever a expressão regular.

Eu tentei junto com outras variações:

sed 's/\(.*[,]\)\(.*[,]\)\(.*[,]\)//g' test

No meu arquivo de teste:

abc,def,ghi,jkl
1234,5678,abcd,efgh

Funciona bem ... Eu tenho visto isso por um tempo e não consigo entender. Alguém capaz de fornecer alguma direção?

    
por DJJ113 02.04.2012 / 04:11

2 respostas

5

Tente:

sed 's/^\([^,]*,\)\([^,]*,\)\([^,]*\)//'

Detalhado:

'^'     start at the beginning of the line
\(  \)  a grouping
[^,]    any character except ','
*       zero or more times
,       the character ','

O \([^,]*,\) é repetido três vezes. O resto da linha é inalterado e incomparável.

com o awk:

awk 'BEGIN {FS=OFS=","}{t=$2;$2=$3;$3=t;print}'
    
por 02.04.2012 / 04:26
1

Não sed solução usando q :

$ q -d, -H -O  'select [student-id],first,last,hwk1,hwk2,hwk3,exam1,hwk4,hwk5,exam2 from sample.csv' 
student-id,first,last,hwk1,hwk2,hwk3,exam1,hwk4,hwk5,exam2
pts-avail,,,100,150,100,200,150,100,300
991-78-7872,Ken,Thompson,95,143,79,185,135,95,259
    
por 28.02.2015 / 02:39