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
将文件内容添加到目标文件中,其中编号部分被截断。
不需要 cut
和 sort
,但不会覆盖现有的目标文件。
我有多个文件(头文件、尾文件和数据文件)需要合并成一个文件并保留文件名的要求。
输入文件
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
将文件内容添加到目标文件中,其中编号部分被截断。
不需要 cut
和 sort
,但不会覆盖现有的目标文件。