입력하다:
1,012018,111
2,1-2018,111
3,10-2018,111
산출:
1,01/2018,111
2,01/2018,111
3,10/2018,111
월과 연도를 mm/yyyy로 편집하는 효과를 어떻게 얻을 수 있습니까?
답변1
GNU Awk를 사용하여 patsplit
두 번째 쉼표로 구분된 필드를 최대 두 자리 소수의 하위 필드로 분할합니다.
$ gawk 'BEGIN{OFS=FS=","} {patsplit($2,a,/[0-9][0-9]?/); $2 = sprintf("%02d/%d%d", a[1], a[2], a[3])} 1' file
1,01/2018,111
2,01/2018,111
3,10/2018,111
Perl이 옵션인 경우
perl -F, -lpe '
$F[1] =~ s{(\d\d?)-?(\d+)}{sprintf "%02d/%d", $1, $2}e;
$_ = join ",", @F
' file
답변2
sed -e 's/^(.),(.),(.)/\2/g' -e 's/([0-9]{1,2})([0-9]{4})/\1-\2/g' 파일*
s/^(.),(.),(.*)/\2/g - 쉼표를 기준으로 분할하고 두 번째 값을 얻습니다. s/([0-9]{1,2})([0-9]{4})/\1-\ 2/g - 연도와 월을 나누고 "-" 삽입
답변3
sed -e 's/^(.),([0-9]{1,2})([0-9]{4}),(.)/\1,\2-\3,\4/g'test.txt
- ^(.*), = 첫 번째 ','까지 캡처하여 \1에 저장
- ([0-9]{1,2}) = 1자리 또는 2자리 숫자를 캡처하여 \2에 저장
- ([0-9]{4}) = 4개의 Didit 번호를 캡처하여 \3에 저장
- ,(.*) \4 = ','의 나머지 부분을 캡처하여 \4에 저장합니다.
- 그에 따라 교체