Script/command 合并 3 个文件,保留最后一个文件名

Script/command to merge 3 files retaining last file name

我有多个文件(头文件、尾文件和数据文件)需要合并成一个文件并保留文件名的要求。

输入文件

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

需要快速帮助才能实现此目的。

提前致谢。

假设所有文件名都是您问题中显示的格式(即,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(少打字)来提取 common/base 文件前缀:

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

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

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