Tenho um arquivo CSV que contém 10 campos diferentes ( ,
é o delimitador). Dados de exemplo:
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
Preciso trocar field2
e field3
usar sed
, mas estou tendo dificuldade em entender como escrever a expressão regular.
Eu tentei junto com outras variações:
sed 's/\(.*[,]\)\(.*[,]\)\(.*[,]\)/\1\3\2/g' test
No meu arquivo de teste:
abc,def,ghi,jkl
1234,5678,abcd,efgh
Funciona bem… Estou olhando para isso há um tempo e não consigo entender. Alguém capaz de fornecer alguma orientação?
Responder1
Tentar:
sed 's/^\([^,]*,\)\([^,]*,\)\([^,]*\)/\1\3\2/'
Quebrado:
'^' 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 permanece inalterado e incomparável.
Com awk:
awk 'BEGIN {FS=OFS=","}{t=$2;$2=$3;$3=t;print}'
Responder2
Não- sed
solução usandoq:
$ 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