파일 프로세스는 첫 번째 열의 마지막 두 문자를 인쇄하고 나머지


0

11 열의 입력 파일이 있으며이 파일을 처리하고 첫 번째 열을 마지막 2 자리를 출력하고 나머지 열을 인쇄해야합니다. 필드는 쉼표로 구분됩니다. 일부 명령을 시도했지만 적절한 결과를 얻지 못했습니다.이 파일에 더 많은 레코드가있는 셸 스크립트가 필요합니다.

입력

9303176179,989303176179,15335,A,1,9,1,0,201712091400,0,0
9303138379,989303138379,15335,A,1,9,1,0,201712091400,0,0
9302922849,989302922849,15335,A,1,9,1,0,201712091400,0,0
9334284759,989334284759,15335,A,1,9,1,0,201712091400,0,0
9334200459,989334200459,15335,A,1,9,1,0,201712091400,0,0
9334022869,989334022869,15335,A,1,9,1,0,201712091400,0,0
9334499819,989334499819,15335,A,1,9,1,0,201712091400,0,0
9334036329,989334036329,15335,A,1,9,1,0,201712091400,0,0
9303053859,989303053859,15335,A,1,9,1,0,201712091400,0,0
9302997519,989302997519,15335,A,1,9,1,0,201712091400,0,0

예상 출력

79,989303176179,15335,A,1,9,1,0,201712091400,0,0
79,989303138379,15335,A,1,9,1,0,201712091400,0,0
49,989302922849,15335,A,1,9,1,0,201712091400,0,0
59,989334284759,15335,A,1,9,1,0,201712091400,0,0
59,989334200459,15335,A,1,9,1,0,201712091400,0,0
69,989334022869,15335,A,1,9,1,0,201712091400,0,0
19,989334499819,15335,A,1,9,1,0,201712091400,0,0
29,989334036329,15335,A,1,9,1,0,201712091400,0,0
59,989303053859,15335,A,1,9,1,0,201712091400,0,0
19,989302997519,15335,A,1,9,1,0,201712091400,0,0

답변:


2

나는 당신이 시도한 도구를 모르지만 sed이런 종류의 것을 사용합니다.

sed 's/^[^,]*\([^,][^,],.*$\)/\1/g'

이것을 필터 ( sed ... <InFile >OutFile)로 사용하거나 -i옵션을 사용 하여 실행 문자열 ( sed -i ... InFile)에 추가 할 파일 이름을 업데이트 할 수 있습니다 .

각 줄을 검색하여 첫 번째 쉼표 앞의 마지막 두 문자를 사용하여 쉼표를 [^,]제외한 모든 문자를 찾습니다 . 그런 다음이 두 문자 앞에있는 일치 필드를 시작 \(하고로 끝의 일치 필드를로 끝 \)냅니다. 그런 다음이 일치 필드는 행의 시작부터 시작하는 전체 일치 표현식을 대체합니다.

나는 습관적으로 정규 표현식을 사용하므로 이것을 작성하는 것이 간단하다는 것을 알지만 배우기가 어렵다는 것을 처음으로 인정합니다.


2

사용 cutpaste:

paste -d, <(cut -f1 -d, input.csv | rev | cut -c1,2 | rev) \
          <(cut -f2- -d, input.csv)

마찬가지로 cut우측으로부터 문자를 카운트 수, I는 사용 rev후, 첫 번째 열의 각 번호를 되돌려으로 처음 두 문자를 추출 cut하고, 다시 복귀.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.