Hellowみんな、AWK:2つの入力ファイルがあります。 1つの共通スクリプトを作成して(AWK)CSV形式で出力できますか?
私は(input_all.txt)または(input_deatils.txt)を処理する必要がある2つのファイルがありますが、私は1つの共通AWKスクリプトでそれらを処理したいと思います。
テーブル形式CSVのように出力を取得しようとしたスクリプト(data.awk)。ここで
awk -f data.awk input_all.txt > output.txt
or
awk -f data.awk input_details.txt > output.txt
は、私が使用しようとしたコード(data.awk)で示したように、私は、コードを使用しようとすると
(私はこのコードを修正する助けが必要):
BEGIN {
split("Node,Boards,Deactive,DEFAULT,PRIO,GRP,LOAD",array,",");
print_array1(array);
}
/^Node Boards Deactive/ { getline
{ while (/^[a-zA-Z0-9]+/ && (NF>1) == 1)
{ array[1]=(substr($0,1,7))
array[2]=(substr($0,10,7))
array[3]=(substr($0,18,10))
array[4]=(substr($0,34,7))
array[5]=(substr($0,45,9))
array[6]=(substr($0,55,7))
array[6]=(substr($0,64,7))
print_array1(array)
getline }
}
}
function print_array1(array)
{
printf("%-9s", array[1])
printf("%-9s", array[2])
printf("%-12s", array[3])
printf("%-9s", array[4])
printf("%-11s", array[5])
printf("%-9s", array[6])
printf("%-5s", array[7])
printf("\n");
#for(item=2;item<=6;item++){array[item]=""}
}
入力ファイルは、次のいずれかの形式にすることができます。 最初のフォーマットはのように示すことができる必要な出力として示すべき
display:TSTS950 ;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
TSTS950 S950
END
display:2CGBMW1 ;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
2CGBMW1 SXSZ
SXSZ
SXSZ
SXSZ
SXSZ
END
display:BM311 ;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
BM311 BM311 DEACTIVE
END
display:BM310 ;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
BM310 BM310 DEACTIVE
END
display:S850 ;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
S850 S850 DEACTIVE
END
display:ENA5 ;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
ENA5 PER BD S850 10
S852 22
S854 1
T850 17
T851 59
T852 1
2S50 44
END
display:SMDRUH;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
SMDRUH S852 S852
S855 S855
S854 S854
S857 S857
S850
S851
S856
S853
END
display:MAINBRD ;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
MAINBRD S850 DEFAULT
S851
S856
S853
BM310
S950
T751
S855
T859
S857
T851
END
第2の入力フォーマットが(Input_details.txt)とすることができる
display:all;
BOARDS STATES IN NODES
Node Boards Deactive DEFAULT PRIO GRP LOAD
TSTS950 S950
2CGBMW1 S854
S857
S852
S855
S853
BM311 BM311 DEACTIVE
BM310 BM310 DEACTIVE
ENA5 PER BD S850 10
S852 22
S854 1
T850 17
T851 59
T852 1
2S50 44
SMDRUH S852 S852
S855 S855
S854 S854
S857 S857
S850
S851
S856
S853
MAINBRD S850 DEFAULT
S851
S856
S853
BM310
S950
T751
S855
T859
S857
T851
END
(input_all.txt)(output.txtと) 。
Node Boards Deactive DEFAULT PRIO GRP LOAD
TSTS950 S950
2CGBMW1 SXSZ
2CGBMW1 SXSZ
2CGBMW1 SXSZ
2CGBMW1 SXSZ
2CGBMW1 SXSZ
BM311 BM311 DEACTIVE
BM310 BM310 DEACTIVE
ENA5 PER BD S850 10
ENA5 PER BD S852 22
ENA5 PER BD S854 1
ENA5 PER BD T850 17
ENA5 PER BD T851 59
ENA5 PER BD T852 1
ENA5 PER BD 2S50 44
SMDRUH S852 S852
SMDRUH S855 S855
SMDRUH S854 S854
SMDRUH S857 S857
SMDRUH S850
SMDRUH S851
SMDRUH S856
SMDRUH S853
MAINBRD S850 DEFAULT
MAINBRD S851 DEFAULT
MAINBRD S856 DEFAULT
MAINBRD S853 DEFAULT
MAINBRD BM310 DEFAULT
MAINBRD S950 DEFAULT
MAINBRD T751 DEFAULT
MAINBRD S855 DEFAULT
MAINBRD T859 DEFAULT
MAINBRD S857 DEFAULT
MAINBRD T851 DEFAULT
コード(data.awk)が出力を生成していません。コードを修正して修正するのに助けてくれる人がいますか?
コードが意図していることを説明してください。 – Jdamian
0 @ Jdamian:コードは、(^ノードボードが無効である)と(END)の間の行を見つけようとしています。私たちがそれらを見つけたたびに、第1行が基準線です。レコードごとに$ 1の値を追加します。また、参照線に$ 3、$ 4、$ 5&$ 7が追加されている場合は追加されます。その後、データを列CSV形式にします。 – Tatman
@ Jdamian:コードは、(^ノードボードが無効である)と(END)の間の行を見つけようとしています。私たちがそれらを見つけたたびに、第1行が基準線です。レコードごとに$ 1の値を追加します。また、参照線に$ 3、$ 4、$ 5&$ 7が追加されている場合は追加されます。その後、データを列CSV形式にします。 – Tatman