2014-02-05 27 views
0

我有以下名稱的一些文本文件:添加特定的頭文件根據文件名

testfile_1_from_Country_A_final.txt 
testfile_2_from_Country_A_final.txt 

testfile_1_from_Country_B_final.txt 
testfile_2_from_Country_B_final.txt 

testfile_1_from_Country_C_final.txt 
testfile_2_from_Country_C_final.txt 

,我必須補充它由三個數字的每一個文件取決於測試的數量特定的頭文件(例如testfile_1)和國家(例如國家A)的名稱以及「1」,而不考慮測試文件或國家/地區名稱。

舉例來說,如果從試file_1_from_Country_A_final.txt的數據是這樣的:

blablablabalabalbalablabbla 
blabalalbblalbablablalbabla 
blalalbablalblabblalbalbalb 
blabalbalblbalbalbalbalbalb 
abllablbalbalbalbalbalbalba 

新的文件應該是這樣的:

30 7 1 
blablablabalabalbalablabbla 
blabalalbblalbablablalbabla 
blalalbablalblabblalbalbalb 
blabalbalblbalbalbalbalbalb 
abllablbalbalbalbalbalbalba 

30,因爲它是A國和7因爲它是test_file編號1,最後1是每個文件必須的。

EXTRA信息

其實有一個大量的文件爲許多國家的,所以也許這將是與每個test_file裏面的號碼的數量和因爲這是各個國家的數字單獨的文本文件是個好主意需要添加到標題。

在此先感謝。

+0

請解釋A→30 1→7. – Alfe

+0

您是否試圖完成您所描述的內容?你有什麼特別困難嗎? 這聽起來像是你想要一個bash腳本,它將文件名分割成由下劃線分隔的部分,選擇與國名片段對應的數字,然後打印文件內容後面的數字。我們是否理解文件名是腳本的命令行參數? – minopret

+0

@Alfe:對於國家A至Z我有一個不同號碼的列表,並且每個國家的文件1至22都有另一個不同號碼的列表。因此,取決於每個國家的每個測試文件名稱是應該添加到每個特定文件的不同標題組合。 – JM88

回答

0

這裏涉及幾個步驟。首先,你需要迭代文件。這可以使用for循環完成:

for filename in testfile_*.txt 
do 
    ... 
done 

然後,您需要從每個文件名中提取測試文件編號和國家。這可以通過在分裂的_文件名來完成,如下圖所示:

IFS=_ read -a arr <<< "$filename" 
test_file_num="${arr[1]}" 
country="${arr[4]}" 

接下來,你需要轉換的測試文件號和國家進入數字。您尚未提供有關如何將國家A變爲數字30的信息。

最後,您需要將標題寫入每個文件。這可以通過使用一個臨時文件這樣做:

echo "30 7 1" > tmpfile 
cat "$filename" >> tmpfile 
mv tmpfile "$filename" 
1

使用此分割的文件名,轉換元件,並插入一個標題行到文件:

for fileName in testfile*.txt 
do 
    if [[ "$fileName" =~ testfile_([0-9]+)_from_Country_([A-Za-z_]+)_final.txt ]] 
    then 
    number=${BASH_REMATCH[1]} 
    country=${BASH_REMATCH[2]} 

    # now convert the number and the country 
    convertedNumber=$(grep "^$number " numberConversionFile.txt | cut -d' ' -f2) 
    convertedCountry=$(grep "^$country " countryConversionFile.txt | cut -d' ' -f2) 

    sed -i "1i$convertedCountry $convertedNumber 1" "$fileName" 
    fi 
done 
+0

我添加了一個'case'語句來轉換字母/數字。根據提供的轉換列表的方式,可能會有比列出所有組合更智能的解決方案。 – Alfe

+0

我再次刪除了愚蠢的'case'邏輯,並添加了一個假定有兩個轉換文件的部分,每個文件都包含像'A 30'和'1 7'這樣的行。 – Alfe

+0

嗨Alfie對於這種新的不便感到抱歉,但實際上Country_A給出的例子類似於Cape_Verde,The_Bahamas,還有一些沒有_例如只是祕魯。我應該如何改變if語句?喜歡這個?? :testfile _([0-9] +)_ from _([A-Z,a-z,_])_ final.txt ???。 – JM88