쉼표로 구분된 필드 수정

쉼표로 구분된 필드 수정

입력하다:

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에 저장합니다.
  • 그에 따라 교체

관련 정보