awk, 하위 문자열에서 문자를 제거하세요

awk, 하위 문자열에서 문자를 제거하세요

다음 CSV가 있습니다. 2017년에서 20을 제거하려고 하므로 3717 또는 31817과 같은 형식이 됩니다. 일부 날짜의 날짜는 한자리이므로 위치가 항상 다릅니다. 연도는 항상 4자리이므로 두 번째 열의 20을 오른쪽에서 왼쪽으로 어떻게 제거합니까?

12 322017 EOD 거래 J 87.75   
123232017 EOD 거래 J 155  
453302017 EOD 거래 J 270 

예상 출력

12 3217 EOD 거래 J 87.75   
12 32317 EOD 트랜잭션 J 155  
45 33017 EOD 트랜잭션 J 270

답변1

방법:

awk '{match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a); $2=a[1]a[2]}1' file

산출:

12 3217 EODTRANSACTION J 87.75
12 32317 EODTRANSACTION J 155
45 33017 EODTRANSACTION J 270

match($2, /^([0-9]+)[0-9]{2}([0-9]{2})$/, a)- 다음을 제외하고 두 번째 필드를 캡처합니다.연구개발 및4마지막의 번째 자리

답변2

두 번째 필드를 다음 결과로 바꿉니다. 두 번째 필드의 첫 번째 "20"을 빈 문자열로 바꾸고 결과 줄을 인쇄합니다.

awk '{$2=gensub("20", "", 1, $2); print;}' input > output

관련 정보