2015-10-19 213 views
0

作爲Ab Initio重新格式化的一部分,我需要根據數據類型將輸入字段映射爲輸出和隱藏。 我寫了一個vba腳本來自動化。 PFB將VBA腳本轉換爲Unix腳本

Sub reformat() 

Dim sel As String 
Dim j As String 

sel = "" 
Sheet1.Activate 
k = Cells(Rows.Count, "A").End(xlUp).Row 
MsgBox (k - 1) 
For i = 2 To k 

If Cells(i, 2).Value = "1" Then 
Cells(i, 5).Value = "out." + Cells(i, 1).Value + "::" + "in." + Cells(i, 4).Value 
End If 
If Cells(i, 2).Value = "Lkp" Then 
Cells(i, 5).Value = "out." + Cells(i, 1).Value + "::" + "first_imp(" + Cells(i, 3) + ")." + "in." + Cells(i, 4).Value 
End If 
If Cells(i, 2).Value = "DT" Then 
Cells(i, 5).Value = "out." + Cells(i, 1).Value + "::" + Cells(i, 3) + "in." + Cells(i, 4) 
End If 
Next i 

輸出是一樣,

Input Datatype Target 
abc string abc out.abc::in.abc 
gbf decimal gbf out.gbf::(decimal(""))in.gbf 

我想在Unix中編寫代碼,這樣我可以刪除的去到Windows執行這個複製及結果反饋給Unix的依賴。 我可以把文件類Unix:

Input|Datatype|Target 

abc|string|abc 

gbf|decimal|gbf 

,我試圖讓輸出文件:

out.abc::in.abc 

out.gbf::(deicmal(""))in.gbf 

請幫忙不是太瞭解shell腳本,

回答

0

如果您的輸入文件input.psv包含:

Input|Datatype|Target 
abc|string|abc 
gbf|decimal|gbf 

您可以使用腳本convert.ksh作爲例如:

#!/usr/bin/ksh 

if [[ -z ${1} ]] 
then 
     echo ""; 
     echo "Usage: $0 <pipe delimited file name>"; 
     echo "Example: $0 file_name.psv"; 
     echo ""; 
     exit 1; 
fi 

for i in $(cat ${1}|grep -vP '^\s*Input\s*\|\s*Datatype\s*\|\s*Target') 
do 
     echo ${i}|awk -F'|' '{print "out." $1 "\t::\t(" $2 "(\"\"))in." $3 ";"}'; 
done 

要做到以下幾點:

./convert.ksh ./input.psv 
out.abc ::  (string(""))in.abc; 
out.gbf ::  (decimal(""))in.gbf;