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)- 두 번째 필드에서 다음을 제외한 모든 숫자를 캡처합니다.rd와4마지막 숫자

답변2

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

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

관련 정보