2012-05-08 136 views
0

我需要將我的bash腳本轉換爲OpenVMS,是否有人知道自動轉換器或可以幫助我手動?轉換Bash腳本爲OpenVMS語法

#!/bin/bash 
# 
# Convert input to .CNF 
inputfile=$1 

rm outfile; 
for line in $(cat $inputfile | awk '{ print $1 }' | tr '\*' ' ' | grep 0041); do 
if [ `cat $inputfile | grep ${line:0:11} | wc -l` -eq 100 ]; then 
echo "?, ?, "${line:2:9}\* >> outfile; 
elif [ `cat $inputfile | grep ${line:0:12} | wc -l` -eq 10 ]; then 
echo "?, ?, "${line:2:10}\* >> outfile; 
else 
echo "?, ?, "${line:2} >> outfile; 
fi; 
#echo ${line:0:11}; 
done; 
cat outfile | sort -u >> newoutfile; 

輸入文件包含一個數字列表,如果存在10或100個以下數字並將它們正常打印,則需要對它們進行分組。例如:

0041XYZ070690* 
0041XYZ070691* 
0041XYZ070692* 
0041XYZ070693* 
0041XYZ070694* 
0041XYZ070695* 
0041XYZ070696* 
0041XYZ070697* 
0041XYZ070698* 
0041XYZ070699* 
0041XYZ077778* 
0041XYZ077949* 
0041XYZ077950* 

變爲:

?, ?, 0041XYZ07069* 
?, ?, 0041XYZ077778 
?, ?, 0041XYZ077949 
?, ?, 0041XYZ077950 
+1

VMS?就像在DCL腳本語言中一樣?我希望你不是那麼認真,我已經用了幾十年了:-) – paxdiablo

+0

@paxdiablo完全不幸的是,我們的一項服務仍然運行在OpenVMS服務器上,我現在必須管理它 – Nexus2k

+0

這是你需要運行的東西一次,還是會定期運行的東西?文件有多大?是否有編譯器可用,例如帕斯卡爾? – HABO

回答

0

由於GNV非常不穩定,我決定使用一個外部Linux主機,它通過ssh首先接收輸出,然後修改它(使用上面的腳本)並通過sftp寫回。

0

我不知道一個轉換器,但你應該能夠在DCL做到這一點很容易地。 棘手的位將用幾行邏輯處理來代替AWK處理 - 除非系統具有GAWK可用。

我不知道bash,但很清楚你需要使用哪些DCL命令。我建議看在任何DCL幫助下(如$幫助打開)或文檔集,

開放

閱讀

的詞彙(特別是F $定位和f $提取物)

如果(再/人)

我想這取決於有多少DCL你已經知道了。如果您需要了解基礎知識,那麼OpenVMS用戶手冊是一個很好的開始http://h71000.www7.hp.com/doc/731final/6489/6489pro_contents.html(第2章,第12,13和第14章)。

阿洛斯http://dcl.openvms.org/可能是一個非常方便的資源 - 你甚至可以找到一個轉換器出現。

+0

也爲1美元的p1,刪除rm。排序命令保持爲「排序」,以調用排序/合併實用程序。但我認爲awk/tr/grep的東西在DCL中複製會很麻煩。 –

0

您可能對GNV(GNU on OpenVMS)工具包感興趣。 http://h71000.www7.hp.com/opensource/gnv.html

它是免費的,它的工作原理。它支持bash,但不確定awk。 這種方式你應該能夠在VMS上使用相同的腳本。

在DCL中重寫腳本也是非常有可能的。 除了直接複製DCL「等價物」的bash步驟之外,還有幾種方法可以做到這一點。如果您仍然需要幫助,您可以告訴我。

+0

不幸的是,GNV沒用。因爲我使用了bash 1.4.17中沒有的substring函數。我試圖將子串部分轉換爲令人難以置信的慢速awk。所以我再次刪除它。 – Nexus2k

+0

如果你至少將GNV解壓縮,它會給你更多的自由來重新編寫腳本。如果你仍然需要DCL解決方案,我試圖在deathrow VMS集羣上編寫腳本,以獲得它的樂趣。該解決方案不像bash那樣緊湊,但似乎可行。 – vmsnomad

+0

不知道如何在這裏附加一個文件,所以我把文件:nexus2k.com放在DEMO賬號的deathrow's gein上(你也可以在[.nexus2k]中運行它)。希望能幫助到你。 – vmsnomad

0

兩年後,我偶然發現了這個話題。 你爲什麼不用AWK或PERL完全解決這個問題?補充腳本weenies/one-trick小馬! 所用不會規模,因爲它的解決方案是一個N方算法(然後一些更多)

對於每個本發明的數據線,所述數據文件被完全讀取(兩次。通過兩個貓和grep) 這表明一定不會有數百萬行。

這個假設允許我們簡單地在數組中累積'十'和'百'計數器。 最糟糕的情況(每個記錄在一個唯一的數百組中)每個數組中的元素數量與輸入記錄數量一樣多。總數遠遠低於一半。 下面的Awk腳本應該可以在OpenVMS上運行,並且僅使用提供的數據集進行測試。 對於一個「真正的」解決方案,知道輸入是否已排序,可能會有泡泡等是很好的。

Enjoy, Hein。

$! DCL ... is is not. Just AWK 
$ gawk /VAR=(INPUTFILE='p1') /INPUT=SYS$INPUT NL: 
BEGIN { 
    while ((getline < INPUTFILE) > 0) { 
    lines++ 
    if ($0 !~ /0041/) continue 
    tens[substr($0,1,12)]++ 
    huns[substr($0,1,11)]++ 
    } 
    print lines i" lines read from " INPUTFILE 
    close (INPUTFILE) 
    while ((getline < INPUTFILE) > 0) { 
    if ($0 !~ /0041/) continue 
    sub(/\*/,"",$0) 
    k = substr($0,1,11) 
    x = huns[k] 
    if (x == -1) continue 
    if (x == 100) { 
     print "?, " k "**" 
     huns[k] = -1 
     continue 
     } 
    k = substr($0,1,12) 
    x = tens[k] 
    if (x == -1) continue 
    if (x == 10) { 
     print "?, " k "*" 
     tens[k] = -1 
     continue 
     } 
    print "?, " $0 
    } 
} 
$ EXIT 
1

另一種選擇是要做到這一點在Python

作者沒有說明他們正在運行的OpenVMS的版本

如果是舊版本,(8.2)之前,你可以下載LD工具並安裝它。從內存中,它會需要重啓

8.2起,LD工具已完全集成到OpenVMS的

的LD工具將允許您創建和安裝OpenVMS上的容器文件

有Python的LD容器文件它們預先安裝了Python,這意味着您不必像這樣安裝Python,只需安裝Python LD容器文件並運行它即可(首先,您需要通過編譯來準備Python版本,但這些都包含在內在LD文件中,它不會在OpenVMS平臺上安裝任何新東西)

一旦你已經安裝了Python(勞工處容器文件內),你可以寫你的Python腳本並在必要時給他們打電話

步驟:

  1. 如果OpenVMS的< 8.2;下載並安裝LD實用程序;重啓

http://www.digiater.nl/lddriver.html

  • 下載的Python OpenVMS的容器和相關聯的工具的容器(2個LD圖像)。
  • http://www.vmspython.org/doku.php?id=downloadandinstallationpython

  • 裝入LD容器文件作爲LD盤

  • 編譯的Python(這是一個一次關閉)

  • 運行Python啓動(本地到您的進程或系統範圍,您的選擇)

  • 調用Python