用于合并保留上一个文件名的3个文件的脚本/命令

时间:2017-11-11 18:37:58

标签: shell unix merge rename ksh

我要求我有多个文件(头文件,预告片文件和数据文件)需要合并到一个保留文件名的文件中。

输入文件

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

需要快速帮助才能实现这一目标。

提前致谢。

2 个答案:

答案 0 :(得分:0)

假设所有文件名都是您问题中显示的格式(即9个字段由单个下划线分隔)...

一些示例数据:

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 (少一点打字)来提取公共/基本文件前缀:

{{1}}

答案 1 :(得分:0)

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

将文件内容添加到编号部分被截断的目标文件中。

不需要cutsort,但不会覆盖现有的目标文件。