2016-06-01 7 views
0

固定幅ファイルがあります。これには2つのレコードタイプ10と20があります。レコードタイプはファイルの最初の2文字になります。各列には、特定の幅が割り当てられています。Unixの各レコードのファイルの特定の位置にフィールドを追加する

INPUT:

1023457 lenovo houseno-67panjagutta Hyderabad 
206789 Vega Bangalore 

以下

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

は、入力ファイルTEST.DATは、2つのレコード、最初のレコード・レコード型10と第2のレコードのレコード・タイプ・20を有しています 出力:

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

レコードタイプ20のパイプを追加して両方のレコードタイプのレコード長が同じ45になるようにしたいのですが、レコードタイプ20にはアドレスフィールドがありませんので、レコードタイプに21個のパイプ文字(アドレスフィールド)両方のレコードタイプが同じ長さになるように-20を設定します。

+2

[編集]あなたの質問簡潔なの数行を含むように、テスト可能に次のようにサンプル入力と期待出力。 –

答えて

0

runコマンド

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} 'ファイル'。私は上記のように複数のフィールドのファイルの3番目のフィールドと6番目のフィールド10スペースなど25スペース/パイプを追加する場合。 –

+0

はい、どうやって "|"複数のフィールドの場合?入力に応じて質問に応じてplsを編集できますか? – Chet

+0

こんにちはChet、87桁目の後にtest.datからtest2.datファイルに26スペースと113カラムを追加して26スペースと116カラムを追加し、20スペースを追加しました。以下は私が使用しているコマンドですが、以下のコマンドを改善することをお勧めしますか?'awk 'BEGIN {FS = OFS =" "} {$ 88 =" $ 88} 1 {$ 116 = "" $ 116} 1' test.dat> test2.dat' –

関連する問題