,
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