我是UNIX的新手。我有5个文本文件,每个文件有500M记录,我想在不使用mv命令的情况下重命名所有5个文件。每个文件中的第一行是列名。我想在重命名所有5个文件之前用标题(我想要的文本)替换每个文本文件中的第一行(列名)。
我正在使用以下脚本重命名和创建标题。
系统配置:
操作系统:SunOS
bash shell
重命名目录:
mv $file1 $name1
注意:我尝试了重命名命令,但它不适用于我的命令。
用标题替换第一行:
删除第一行:
sed '1d' $name1 > tmpfile
mv tmpfile $name1
在第一行附加文字:
echo "text" | cat - $name1 > text.txt.tmp
mv text.txt.tmp $name1
我在运行时没有遇到任何错误。问题是需要很长时间才能执行这些操作。
有没有有效的方法可以做到这一点?
答案 0 :(得分:0)
使用标准化的UNIX接口,无法使用任何编程语言向现有文件添加标头。
这是因为用于要求操作系统执行文件系统操作的系统调用接口允许您追加到文件,或用现有的新内容替换现有字节相同的长度 - 但是没有标准化的接口可以让你在文件的开头或中间插入新字节。
具有少量非常特定的文件系统的现代Linux有一些非标准的系统调用可以让你添加新的块 - 通常一次只增加4KB - 但是(1)这不适用于SunOS,( 2)无法直接从bash访问,并且(3)如果要插入的内容不是块大小的精确倍数,并且在文件的块大小边界上对齐,则无法工作