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