SED를 사용하여 CSV의 두 열 바꾸기

SED를 사용하여 CSV의 두 열 바꾸기

,10개의 서로 다른 필드( 구분 기호) 가 포함된 CSV 파일이 있습니다 . 예시 데이터:

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

field2바꿔서 field3사용해야 하는데 sed정규식 작성 방법을 이해하는 데 어려움을 겪고 있습니다.

나는 다른 변형을 시도했습니다.

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

내 테스트 파일에서:

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

훌륭하게 작동합니다... 한동안 이것을 살펴봤지만 알 수 없습니다. 누구든지 지침을 제공할 수 있습니까?

답변1

노력하다:

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

분할:

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

\([^,]*,\)세 번 반복하십시오 . 나머지 줄은 변경되지 않고 일치하지 않습니다.

awk를 사용하세요:

awk 'BEGIN {FS=OFS=","}{t=$2;$2=$3;$3=t;print}'

답변2

비용 해성 sed사용:

$ 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

관련 정보