awk에서 특정 유형의 문자를 제거하는 방법

awk에서 특정 유형의 문자를 제거하는 방법

A.csv (sep=",") 파일이 있습니다.

Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*
07/15/20  19:10:03,TAQPATH-AB275013338-MOL_0003,2060565907,E11,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
07/15/20  19:10:03,TAQPATH-AB275013338-MOL_0003,2060565919,A10,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
07/15/20  19:10:03,TAQPATH-AB275013338-MOL_0003,2060565931,E01,Patient,VALID,SARS-CoV-2 Not Detected,REPORT

열 4에서 "0"을 제거하고 싶지만 숫자 [1-9]에만 해당됩니다. 즉, 데이터가 "B01"이면 "B1"을 원하지만 데이터가 "B10"이면 그대로 두기를 원합니다. " B10". 내 예에서는 다음과 같습니다.

Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*
07/15/20  19:10:03,TAQPATH-AB275013338-MOL_0003,2060565907,E11,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
07/15/20  19:10:03,TAQPATH-AB275013338-MOL_0003,2060565919,A10,Patient,VALID,SARS-CoV-2 Not Detected,REPORT
07/15/20  19:10:03,TAQPATH-AB275013338-MOL_0003,2060565931,E1,Patient,VALID,SARS-CoV-2 Not Detected,REPORT

나는 그것을 완료했습니다:

awk -F ","  'BEGIN{OFS=",";} {sub("0", "", $4); print}' A.csv > B.csv

하지만 "0"이 모두 제거됩니다. 누구든지 아이디어가 있습니까?

감사해요

답변1

한 가지 방법은 첫 번째 문자를 백업하고 다음을 0사용하여 선행 문자가 포함된 부분을 바꾸는 것입니다.sub()

awk -F "," 'BEGIN{ OFS="," } $4 ~ /^[[:alpha:]]/ { lead = substr($4, 1, 1); sub ("^[[:alpha:]]0*", lead, $4) }1' file

초기 조건은 문자로 시작하는 $4 ~ /^[[:alpha:]]/줄만 표시합니다 . $4우리는 함수를 사용하여 이 줄의 첫 번째 숫자만 추출한 substr()다음 sub()처음부터 바꾸기를 사용하고 모든 선행 0을 사용하여 패턴을 첫 번째 문자로만 바꿉니다.

또 다른 방법은 첫 번째 알파벳 뒤의 부분을 강제로 숫자 부분으로 변환하여 +0앞에 오는 0을 제거하는 것입니다.

awk -F "," 'BEGIN{ OFS="," } $4 ~ /^[[:alpha:]]/ && NR > 1 { $4 = substr($4, 1, 1) "" substr($4, 2)+0 }1' file

관련 정보