awk에서 gsub 사용

awk에서 gsub 사용

아래에서 입력 파일(file1 및 file2)을 찾아 file3에 출력을 가져옵니다.

awk에서 -GSUB를 사용하세요

파일 1:

000000018*A00045425530
000000022*A00002122779
000000032*A00051046521
000000035*A00008977353
000000052*A00050659539

파일 2:

A00045425530 *204***204***0.01**********1**1*****18**0****1***********0.01***0**0***0                    (EOR)
A00020515159 *6071***6071*************1**1*****26**0****1***0*0**0***0*****0**0***0                    (EOR)
A00002122779 *****************1*************1****************0***0                    (EOR)
A00002293889 ********************************************0**0***0                    (EOR)
A00008977353 *****************1*************1****************0***0                    (EOR)

AGN(파일 1의 필드 2 및 파일 2의 필드 1)을 일치시키고 awk에서 gsub를 사용하여 일치하는 출력에서 ​​"(EOR)"를 null로 제거합니다. 출력은 다음과 같아야 합니다.

파일 3 출력:

A00045425530 *204***204***0.01**********1**1*****18**0****1***********0.01***0**0***0
A00002122779 *****************1*************1****************0***0
A00008977353 *****************1*************1****************0***0

답변1

awk 'NR==FNR{ a[$2] }
  NR!=FNR && $1 in a{
    gsub(/\s+\(EOR\)/, "")
    print
  }
' FS='*' file1 FS=' ' file2 > file3

첫 번째 파일을 읽을 때 이를 *입력 필드 구분 기호로 사용하고 두 번째 필드를 배열에 대한 인덱스 a(널 값 포함)로 사용합니다.
두 번째 파일을 읽을 때 공백 문자를 입력 필드 구분 기호로 사용하고 첫 번째 필드가 배열의 인덱스로 존재하는지 테스트합니다 a. 조건이 true이면 (EOR)다음 공백 문자를 모두 빈 문자열로 바꾸고 현재 줄을 인쇄합니다. 출력이 로 리디렉션됩니다 file3.

관련 정보