2016-06-01 4 views
0

2 개의 레코드 유형 10과 20을 가진 고정 너비 파일이 있습니다. 레코드 유형은 파일의 처음 두 문자에 있습니다. 각 열에는 지정된 너비가 있습니다.유닉스의 각 레코드에 대해 파일의 특정 위치에 필드 추가하기

INPUT :

1023457 lenovo houseno-67panjagutta Hyderabad 
206789 Vega Bangalore 

아래

record type-10, record length-45; 
record type-20, record length-24 

입력 파일 TEST.DAT 두 레코드 먼저 기록 - 기록 형 (10)과 두 번째 기록 레코드 타입 (20)을 갖는다 출력 :

1023457 lenovo houseno-67panjagutta Hyderabad 
206789 Vega |||||||||||||||||||||Bangalore 

두 레코드 유형이 동일한 레코드 길이 45가되도록 레코드 유형 20을 추가하려고합니다. 레코드 유형 20에 21 개의 파이프 문자 (주소 필드)를 추가하고자합니다. 여기에 주소 필드가 없습니다. -20 두 레코드 유형이 같은 길이를 만들 수 있습니다.

+2

[편집] 간결한 몇 줄을 포함하는 질문, 검증을 다음과 같이 샘플 입력 및 예상 출력. –

답변

0

실행 명령

awk -f append.awk test 

append.awk

#! /bin/awk -f 
BEGIN{ 
max=45; 
FS="" 
} 
$1$2 == 20 && length <45{ 
    FS=" "; 
    $0=$0; 
    len=length; 
    for(i=1; i<=max-len; i++){ 
     $3="|"$3 
    }; 
    print $0; 
    FS=""; 
    next 
} 
1 

출력

1023457 lenovo houseno-67panjagutta Hyderabad 
206789 Vega ||||||||||||||||||||||||Bangalore 
+0

안녕하세요 Chet, 답장을 보내 주셔서 감사합니다. 단일 필드를 추가하려는 경우 위에서 수행 할 수 있습니다. 파일에 여러 필드를 추가하려는 경우 우리는 다른 접근법을 가지고 있습니까? 예 - awk BEGIN {FS = OFS = ""} {$ 19 = ""$ 19} 1 '파일'. 내가 여러 필드에 대해 위와 같이 파일에서 3 번째 필드와 6 번째 필드에 25 개의 공백/파이프를 추가하려는 경우. –

+0

네,하지만 어떻게 "|" 여러 필드의 경우? 입력에 따라 질문을 편집 할 수 있습니까? – Chet

+0

안녕하세요 Chet, 87 번째 열에 26 번째 공백을 추가하고 113 번째 열에 26 개의 공백과 116 번째 열을 추가하여 test.dat 파일의 test2.dat 파일에 20 개의 공백을 추가했습니다. 아래 명령은 제가 사용하고있는 명령입니다. 아래 명령어를 개선 할 것을 제안 할 수 있습니까? 'awk 'BEGIN {FS = OFS = ""} {$ 88 = "$ 88} 1 {$ 116 =" "$ 116} 1'test.dat> test2.dat' –

관련 문제