2017-11-11 429 views
-1

我有要求,我有多個文件(頭文件,尾部文件和數據文件)需要合併成一個文件保留文件名。腳本/命令合併3個文件保留最後的文件名

輸入文件

WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_1.TXT (Header file) 
WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_2.TXT (data file) 
WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_3.TXT (trailer file) 

WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_1.TXT (Header file) 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_2.TXT (data file) 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_3.TXT (trailer file) 

輸出文件應具有相同的順序和文件名應該是這樣的文件中的數據。

WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7.TXT 
WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3.TXT 

需要快速幫助來實現這一點。

在此先感謝。

+3

所以你的意思是創建一個shell腳本?你有多遠?在你的問題中包含你的腳本。 – mattias

+0

這將是'cat'的有用用法 –

+0

我試過這個 ls | awk -F'_''!x [$ 1] ++ {print $ 1}'|同時讀取-r行 做 cat $ line >> $ line \ .txt 完成它創建具有正確數據的臨時文件,但我需要重命名文件名,如上所述,並刪除現有文件。只保留最終文件。 – VTIN

回答

0

假設所有的文件名是在你的問題中顯示的格式(即,9場單下劃線分隔)...

一些樣本數據:

$ for f in WP*_?_?.TXT 
do 
    echo "+++++++ $f" 
    cat $f 
    echo "" 
done 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_1.TXT 
2024916 header 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_2.TXT 
2024916 data 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3_3.TXT 
2024916 trailer 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_1.TXT 
2024078 header 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_2.TXT 
2024078 data 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7_3.TXT 
2024078 trailer 

因爲我對於這個簡單的情況下,選擇使用cut代替awk(少一點打字)以提取公共/基本文件前綴:

$ ls WP*_?_?.TXT | cut -d"_" -f1-8 | sort -u | while read -r fprefix 
do 
    # concatenate source files 
    cat ${fprefix}_[123].TXT > ${fprefix}.TXT 

    # display concatenated files 
    echo "+++++++ ${fprefix}.TXT" 
    cat ${fprefix}.TXT 
    echo "" 
done 

+++++++ WP2024078_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_3.TXT 
2024916 header 
2024916 data 
2024916 trailer 

+++++++ WP2024916_191_FACETS_DAILY_CLAIMS_EXTRACT_20171110094055_7.TXT 
2024078 header 
2024078 data 
2024078 trailer 
+0

非常感謝你..它的工作,只有很小的變化,我做了刪除WP從LS命令,因爲我可以有文件名也以其他字母開頭..更多的事情,我想在這裏添加的是我想刪除3個源文件,並只保留最終文件..我可以刪除.. ..? – VTIN

+0

如果'$ {fprefix}'是正確的,你可以刪除3x源文件,如:'rm $ {fprefix} _?_ ?. TXT' – markp

+0

再次感謝您的大力幫助......您是天才! !你讓我今天一整天都感覺很好 !!!!!!這裏是我正在使用的最終代碼****************************************** ******* ls * _?_ ?. TXT | cut -d「_」-f1-8 | sort -u |而讀-r fprefix 做 #串連的源文件 貓$ {fprefix} _ [123] .TXT> $ {fprefix} .TXT #顯示級聯文件 回聲「+++++++ $ {fprefix } .TXT「 cat $ {fprefix} .TXT \t rm $ {fprefix} _ ?. TXT echo」「 done ******************** ********************** – VTIN

0
ls *_?_?.TXT | while read -r filename 
do 
    # concatenate source files 
    cat $filename >> ${filename%_*}.TXT 
    rm $filename 
done 

將文件內容添加到編號部分被切斷的目標文件。

不需要cutsort,但不覆蓋現有的目標文件。

相關問題