2017-12-09 1 views
1

큰 파일이 있는데, ";"으로 구분 된 열이 있습니다.각 레코드의 행에 헤더를 추가하는 방법

행을이 행으로 바꾸었지만 행에 헤더를 추가해야합니다.

입력 파일

31561;49215;10;1196825801480000 
31561;49215;12;1196825801480000 
31561;48665;14;1196825806980000 

이 코드를 사용하여 행에 열을 바꾸어.

31561 
49215 
10 
1196825801480000 

31561 
49215 
12 
1196825801480000 

31561 
48665 
14 
1196825806980000 

하지만 헤더를 추가하고이 같은 것을 가지고합니다 :

sed '$'!'G' file | tr ';' '\n' 

내가 가진 출력은

Status1 
Information1 
Line  : 31561 
Point : 49215 
Code: : 10 
TB  : 1196825801480000 

Status1 
Information1 
Line  : 31561 
Point : 49215 
Code: : 12 
TB  : 1196825801480000 

Status1 
Information1 
Line  : 31561 
Point : 48665 
Code: : 14 
TB  : 1196825806980000 

는,이 문제를 해결하는 데 도움이 될 수 있습니다주세요. 감사합니다

나는 다음과 같은 코드를 변경 :

awk -F';' '{ 
    print "Status1" 
    print "Information1" 
    print "Line  :" $1; 
    print "Point :" $2; 
    print "Code  :" $3; 
    print "TB  :" $4"\n"; 
}' file 

작동 :)

답변

2

솔루션 awk 사용 :

awk -i inplace -F';' ... 
... 
... 
:

awk -F';' '{ 
    if (NR != 1) printf "\n"; 
    print "Status1\nInformation1"; 
    print "Line: " $1; 
    print "Point: " $2; 
    print "Code: " $3; 
    print "TB:", $4; 
}' file 

은 내부 편집을 사용하려면

+0

큰, PesaThe, 그냥 내가 직접 파일을 사용하여 할 수있는 가능성이, 코드를 업데이트 할 수있는 가능성이있다, 출력이 원하는 수정 열에서 행으로 전 환한 후에가 아닙니다. – OXXO

+0

awk -i inplace는 무엇입니까? 설명해 주시겠습니까? – OXXO

+0

귀하의 의견을 오해 한 것 같습니다. '-i inplace'는 파일을 편집합니다. 따라서 변경 내용은'stdout'에 인쇄되지 않고 파일에 직접 만들어집니다. – PesaThe

2
을 사용

$ awk -F";" 'BEGIN{ split("Line;Point;Code;TB",array)} {print "Status1" ORS "Information 1"; for(i=1; i<=NF; i++) print array[i]"  : "$i; printf ORS}' file 
Status1 
Information 1 
Line  : 31561 
Point  : 49215 
Code  : 10 
TB  : 1196825801480000 

Status1 
Information 1 
Line  : 31561 
Point  : 49215 
Code  : 12 
TB  : 1196825801480000 

Status1 
Information 1 
Line  : 31561 
Point  : 48665 
Code  : 14 
TB  : 1196825806980000 

split("Line;Point;Code;TB",array) awk가 : 분할 기능 array으로 문자열을 분할한다. 더 많은 열을 가지고 있다면 split 문 자체에서 해당 열을 언급 할 수 있으며 for 루프는 원하는 형식으로 출력을 인쇄합니다.

말 새 파일에 출력을 리디렉션하려면 output_file

$ awk -F";" 'BEGIN{ split("Line;Point;Code;TB",array)} {print "Status1" ORS "Information 1"; for(i=1; i<=NF; i++) print array[i]"  : "$i; printf ORS}' file> output_file 
+1

great batMan. 좋은 직장 – OXXO

+0

배트맨, 원하는 출력과 정확하게 같은 헤더와 데이터를 분리 할 수 ​​있습니까 \ t – OXXO

+0

@ user2734334 : 예를 들어 print 문에'\ t' 대신 필요한 정확한 공백 수를 넣으면됩니다. 업데이트 된 답변. – batMan

관련 문제