我在文件夹中有数千个带有编码天气信息的文件。对于每个文件,我需要添加带有控制字符的页眉和页脚。这不是问题,因为我在单独的文件中有页眉和页脚(在bash脚本中使用cat
命令实现)。
但是,修改过的文件需要保留原来的名字 - 这给我一个问题,因为我只有非常基本的脚本知识。保留它们的原因是这些文件将被解析和解码。文件名包含有关解码器如何处理内容的重要信息。
要解码的所有文件都在一个单独的文件中list_of_files_to_decode.txt
。
文件夹内容的一部分可能如下所示:
a_snvs02wiix170600_c_eswi_20121117062131_76.txt
a_smci40babj170600_c_kwbc_20121117061545_3.txt
a_sath40vtbb170600_c_ekmi_20121117061604_95.txt
a_usxx40mynn70600cca_c_edzw_20121117062020_34.txt
a_siin40dems170600_c_ojam_20121117062020_40.txt
a_smxx40fapr170600rra_c_lowm_20121117062604_67.txt
list_of_files_to_decode.txt
start-seq.txt
stop-seq.txt
我已经检查了网络,并使用awk
和sed
测试了我自己的一些想法 - 但我无法找到任何合适的方法来实现这一点办法。所以,我希望得到一些帮助或提示如何继续。
答案 0 :(得分:3)
while IFS= read -r file; do
cat header.txt "$file" footer.txt > newfile && mv newfile "$file"
done < list_of_files_to_decode.txt
<强>说明强>
&&
是一种捷径。这与if condition; then action; fi
答案 1 :(得分:0)
唯一安全的方法是首先重命名原始文件
mv $file $file.orig
cat header $file.orig footer > $file && rm $file.orig
反之亦然,创建一个新文件,然后覆盖原始文件
cat header $file footer > $file.new && mv -f $file.new $file
答案 2 :(得分:0)
使用sed
的无环路方式:
OLDIFS=$IFS; IFS=$'\n'
sed -i '1 r header.txt
1 N
$ r footer.txt' $(<list_of_files_to_decode.txt)
IFS=$OLDIFS
<小时/> 注意:
IFS
设置为换行符r
在阅读下一行时打印文件内容 1 N
阻止在header.txt
(详情:它读取第二行并追加到模式空间,触发r
打印出header.txt
的内容。之后,模式空间,现在由第1行和第2行组成,仅在周期结束时打印出来)
IFS
。