2011-12-15 104 views
-1

我們需要一個shell腳本來檢索當前目錄中的所有txt文件,併爲每個文件檢查它是空文件還是包含任何數據它(我相信可以用wc命令完成)。用文件名替換unix文件最後一行的第一個字符

如果爲空,則忽略它別的,因爲在我們的條件,在這個目錄下的所有txt文件要麼是空或包含大量的數據,其中該文件的最後一行是這樣的:

Z|11|21|||||||||| 

即最後一行具有字符Z然後|然後an integer然後|然後an integer然後某些數字|符號。

如果文件不是空的,那麼我們只是假定它具有這種格式。最後一行之前的數據是亂碼,對我們來說不是必需的,但最後一行之前至少有一行,即如果文件非空,至少會有兩行保證。

我們需要一個代碼,其中如果文件非空,那麼它需要該文件,用'filename.txt'替換最後一行中的'Z',並將新數據寫入另一個文件tempfile中。最後一行將因此變爲:

filename.txt|11|21||||||| 

該行的剩餘部分保持不變。從臨時文件中取出最後一行,即filename.txt|int|int|||||併合併成最終文件。 tempfile的內容被清除,以接收來自同一目錄中的下一個filename.txt的數據。 finalfile具有該目錄中所有非空txt文件的最後一行的編輯版本。

如:FILE1.TXT有數據

.... 
.... 
.... 
Z|1|1||||| 

和FILE2.TXT有數據

.... 
.... 
.... 
Z|2|34||||| 

腳本運行之後,FILE1.TXT的新數據

..... 
..... 
..... 
file1.txt|1|1|||||| 

這將寫入一個新的文件,說temp.txt最初是空的。從那裏最後一行被合併到一個文件final.txt中。所以,在final.txt的數據是:

file1.txt|1|1|||||| 

這個合併後,在TEMP.TXT數據被清除
FILE2.TXT的新數據

... 
... 
... 
file2.txt|2|34|||||| 

這將被寫進相同的文件temp.txt。從那裏,最後一行被合併到同一個文件final.txt中。
所以,在final.txt數據是

file1.txt|1|1|||||| 
file2.txt|2|34|||||| 

考慮返回是類型TXT和非空的,並在同一目錄中的文件,在最終數據的N個後。TXT成爲

file1.txt|1|1|||||| 
file2.txt|2|34|||||| 
file3.txt|8|3|||||| 
....... 
....... 
....... 
fileN.txt|22|3||||| 

對於一些條件,我已經知道了命令,像
對於文本類型的目錄查找文件,

find <directory> -type f -name "*.txt" 

連續服用的最後一行,併合併成另一個文件

tail -1 file.txt>>destination.txt 
+0

這聽起來像是有人要求他們爲他們完成工作。如果是這樣,你將支付多少錢一個解決方案:)如果不是,下面的一些基本的bash代碼。 – 2011-12-15 07:51:58

回答

1

您可以使用'sed'替換「z」字符。你將會處於循環狀態,所以你可以使用你擁有的文件名。這只是刪除Z,然後回顯行和文件名。

祝你好運。

#!/bin/bash 
filename=test.txt 
line=`tail -1 $filename | sed "s/Z/$filename/"` 
echo $line 

編輯:

你第一次運行find命令,看到輸出?當然在每行的開頭有一個./。這將打破sed,因爲sed使用/作爲分隔符。它也不適用於你的問題陳述,在陳述文件之前沒有額外的「/」。你說當前目錄,你給的命令將遍歷ALL子目錄。嘗試簡單並使用LS

# `2>/dev/null` puts stderr to null, instead of writing to screen. this stops 
# us getting the "no files found" (error) and thinking it's a file! 
for filename in `ls *.txt 2>/dev/null` ; do 
    ... stuff ... 
done 
+0

用於`find的文件名。 -type f -name「* .txt」` do line =`tail -1 $ filename | sed「s/Z/$ filename /」` echo $ line done – Ashish 2011-12-15 08:37:32

相關問題