-3

我有一些文件的前三行只是一个标题。但是对于我来说,他们需要在开头添加一个注释符号,例如#. 如果我的文件被调用test.txt(如下所示),我如何#仅在前三行添加 a ,如果可能的话,如果已经存在#.

A    B    C    D
1    2    3    4

131  4.32  23  42
132  4.31  22  42
...  ...  ... ...

在前三行之后,我有我的实际数据。所以我希望它是:

#A    B    C    D
#1    2    3    4
#
131  4.32  23  42
132  4.31  22  42
...  ...  ... ...

所以我可以轻松地加载数据,例如np.loadtxt('test.txt')在 python 中。我认为这在 bash 中最简单,但 python 也可以。

感谢您的帮助。

4

2 回答 2

3

你用 标记了这个问题bash,所以你可以在你的 shell 中尝试这个 sed 单行:

sed '1,3s/^/#/' file

如果您想“就地”进行更改:添加-i

sed -i '1,3s/^/#/' file

编辑

如果已经有领先,则跳过该行#

sed '1,3{/^#/!s/^/#/}' 
于 2013-04-24T11:50:24.183 回答
1

如果你想使用awk,这可以工作:

awk '(NR<=3 && !/^#/) {$0="#"$0} {print}' your_file

解释

(NR<=3 && !/^#/)代表 <= 3 的行数和不以 . 开头的行#。在这种情况下,我们用 更新前导#$0="#"$0。如果条件不匹配,我们只打印带有{print}.

测试

没有任何#

$ cat s
A    B    C    D
1    2    3    4

131  4.32  23  42
132  4.31  22  42

$ awk '(NR<=3 && !/^#/) {$0="#"$0} {print}' s
#A    B    C    D
#1    2    3    4
#
131  4.32  23  42
132  4.31  22  42

已经有一些#

$ cat s
#A    B  #  C    D
1    2    3    4

131  4.32  23  42
132  4.31  22  42

$ awk '(NR<=3 && !/^#/) {$0="#"$0} {print}' s
#A    B  #  C    D
#1    2    3    4
#
131  4.32  23  42
132  4.31  22  42
于 2013-04-24T11:55:23.490 回答