在一组文件的顶部添加行

时间:2017-01-16 19:13:06

标签: bash perl

我绝对不是程序员,对此领域一无所知。

我总是要在文件顶部添加七行才能运行它们,这很无聊。

是否可以创建一个Perl脚本,该脚本可以将相同的六行从一个文件复制到一组具有相同名称的文件,但数字除外。

我的种子文件将是这样的

function drawPoint(x, y){
	console.log("Drawing point(" + x + ", " + y + ")");
    //your logic of drawing here...
}

var path = {
  x: [0,100,100],
  y: [0,10,50],
};

for(var key in path.x){
    drawPoint(path.x[key], path.y[key])
}

文件名称为nproc=8 mem=48gb B3LYP/6-31g(d,p) opt input 1 1 test1.com等。

他们的形式是这样的

test2.com

我想将它们转换为

H 2.3
C 4.1
'blank line'

我尝试修改我找到的脚本,但它复制了底部的七行。

这是我使用的脚本,但不起作用(文件是.sh):

nproc=8
mem=48gb
B3LYP/6-31g(d,p) opt

input

1 1
H 2.3
C 4.1
'blank line'

2 个答案:

答案 0 :(得分:0)

问题在于这一行

head -7 seed.com | tail -7 >> test$i.com

我会这样做

( head -n 7 seed.com ; cat test$i.com ) > full_test$i.com

这将保留test*.com个文件,并创建名为full_test*.com的新文件,这些文件将是合并后的版本。

您可以直接更新test*.com个文件,但如果您不小心运行了两次脚本,那么每个test*.com会有两个标题。

答案 1 :(得分:0)

您实际上无法插入文件。你只能写一个文件。在优化之前插入文件看起来如下所示:

  1. 设置buf_size = num_bytes_to_insert。
  2. 打开rw。
  3. 的文件
  4. 设置pos = file_size。
  5. 虽然pos> 0,
    1. 设置dest_pos = pos。
    2. 设置pos = pos - buf_size。
    3. 如果pos<设置pos = 0 0
    4. 寻找位置。
    5. 设置num_bytes_to_read = dest_pos - pos。
    6. 读取num_bytes_to_read字节。
    7. 寻找位置pos + num_bytes_to_insert。
    8. 写入读取的字节。
  6. 寻找位置0。
  7. 写入要插入的数据。
  8. 优点:

    • 保留文件权限。
    • 固定内存开销(O(1)内存使用情况)。

    缺点:

    • 复合
    • 错误导致数据丢失。

    有两种更简单的方法,一种涉及将整个文件读入内存,另一种涉及临时文件。以下是后者:

    cat seed.com "test$i.com" >"test$i.com.tmp" && mv "test$i.com.tmp" "test$i.com"
    

    优点:

    • 简单
    • 错误不会导致数据丢失。

    缺点:

    • 文件权限丢失。
    • 与文件大小成比例的内存开销(O(N)内存使用量)。