2017-11-11 394 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,但不覆盖现有的目标文件。

相关问题