2017-12-09 15 views
1

大きなファイルがあり、 ";"で区切られた大きなファイルがあります。各レコードのヘッダーを行に追加する方法

これを行に転記しましたが、行にヘッダーを追加する必要があります。

入力ファイル

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

私はこのコードを使用して行に列を転置します。

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

私が得た出力は次のようになります。

31561 
49215 
10 
1196825801480000 

31561 
49215 
12 
1196825801480000 

31561 
48665 
14 
1196825806980000 

しかし、私は、ヘッダーを追加したいと、このような何かを得ます:

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 -F';' '{ 
    if (NR != 1) printf "\n"; 
    print "Status1\nInformation1"; 
    print "Line: " $1; 
    print "Point: " $2; 
    print "Code: " $3; 
    print "TB:", $4; 
}' file 

は、インプレース編集を使用するには

+0

は素晴らしいと言う、直接ファイルを使用してそれを実行する可能性があります列から行への転置後ではありません。 – OXXO

+0

awk -i inplaceは何ですか?説明してください。 – OXXO

+0

私はあなたの意見を誤解しているかもしれません。 '-i inplace'はファイルを編集します。したがって、変更は 'stdout'には表示されませんが、直接ファイルに出力されます。 – PesaThe

2

awkの

$ 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)使用:スプリット機能はarrayに文字列を分割します。より多くの列を持っている場合は、split文自体でこれらの列を記述することができます。また、forループは、希望の形式で出力を出力します。新しいファイルに出力をリダイレクトする

はちょうど私があなたのコードを更新する可能性があり、所望の出力を修正し、PesaThe、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

関連する問題