마지막에 count를 추가한 후 string 데이터 타입의 위치가 바뀌는 것을 관찰하였다.
awk '$2=="H" {x = substr($3,1,4); next} {$(NF+1) = x} 1'
입력하다:
12 H 0003A
12305245D 2500 AB 5454 87870001A
12305245D 2500 ABC 5454 87870002A
12305245D 2500 ABCD 5454 87870003A
예상 출력:
12 H 0003A
12305245D 2500 AB 5454 87870001A 0003
12305245D 2500 ABC 5454 87870002A 0003
12305245D 2500 ABCD 5454 87870003A 0003
실제 출력:
12 H 0003A
12305245D 2500 AB 5454 87870001A 0003
12305245D 2500 ABC 5454 87870002A 0003
12305245D 2500 ABCD 5454 87870003A 0003
답변1
Set field 구분 기호를 빈 문자열로 사용하여 -F ''
각 문자를 별도의 필드로 처리하도록 awk에 지시합니다 . $
마찬가지다안 돼요동일합니다 H
( $3
지정된 하위 문자열을 가질 수 없음). 대신 기본(공백) 구분 기호를 사용하세요.
print $0, x
또한 하위 문자열 을 문자열( $0 = $0 x
) 로 추가하는 대신 별도의 구분 필드로 추가하려는 것 같습니다.
$ awk '$2=="H" {x = substr($3,1,4)} $2!="H" {print $0, x}' input
12305245D 2500 AB 5454 87870001A 0003
12305245D 2500 ABC 5454 87870002A 0003
12305245D 2500 ABCD 5454 87870003A 0003
단순화된 버전:
$ awk '$2=="H" {x = substr($3,1,4); next} {print $0, x}' input
12305245D 2500 AB 5454 87870001A 0003
12305245D 2500 ABC 5454 87870002A 0003
12305245D 2500 ABCD 5454 87870003A 0003
노트이 답변엄격하게 예약됨입력 필드의 위치: 마지막 열의 가변 간격은 가변 개수의 후행 공백의 결과입니다.귀하가 게시 한 입력에서.