다음 형식의 csv 파일이 있습니다.
abc,124,123,2014-08-13,abc
def,124,123,2014-08-13,abc
ghi,124,123,2014-08-13,abc
이제 다섯 번째 열( )만 수정하면 2014-08-13
아래와 같은 출력이 생성됩니다.
abc,124,123,13/08/2014,abc
def,124,123,13/08/2014,abc
ghi,124,123,13/08/2014,abc
가능하다면 라이너 awk
나 솔루션을 사용하는 것이 좋습니다.sed
답변1
해결책 awk
:
awk -F'[,-]' '{printf "%s,%s,%s,%s/%s/%s,%s\n", $1, $2, $3, $6, $5, $4, $7}' file
설명하다:
-F'[,-]
: 구분 기호를,
또는 로 설정합니다.-
'{printf "%s,%s,%s,%s/%s/%s,%s\n", $1, $2, $3, $6, $5, $4, $7}'
: 끝에 개행 문자를 사용하여 원하는 순서로 섹션을 인쇄합니다.
해결책은 다음 과 같습니다 sed
.
sed 's|\([0-9]*\)-\([0-9]*\)-\([0-9]*\)|\3/\2/\1|g' file
설명하다:
\([0-9]*\)-\([0-9]*\)-\([0-9]*\)
:digits-dash-digits-dash-digits 검색 (하위 패턴\1
,\2
합계 에 숫자 저장\3
)\3/\2/\1
/
중간 순서 로 역순으로 교체하십시오 .
답변2
펄 솔루션:
perl -aF'[,-]' -ne 'print join ",", @F[0..2], join("/", @F[5,4,3]), $F[6]' < input
답변3
그리고 sed
:
$ sed -e 's#\([0-9]\{1,\}\)-\([0-9]\{1,\}\)-\([0-9]\{1,\}\)#\3/\2/\1#' file
abc,124,123,13/08/2014,abc
def,124,123,13/08/2014,abc
ghi,124,123,13/08/2014,abc
GNU 또는 FreeBSD가 있는 경우 다음을 sed
사용할 수 있습니다.
sed -E 's#([0-9]+)-([0-9]+)-([0-9]+)#\3/\2/\1#' file
또는 perl
:
perl -pe 's#(\d+)-(\d+)-(\d+)#$3/$2/$1#'
답변4
이상한 솔루션
awk -F ',' '{split($4, a, "-"); $4 = (a[3] "/" a[2] "/" a[1])}1' OFS=, file