我有一些文件,前三行只是一个标题。但是对我来说,他们需要一个注释符号,就像#
一样。
如果我的文件被调用test.txt
(如下所示),如何仅向前三行添加#
,如果可能,则如果已有#
则不添加评论符号
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
... ... ... ...
所以我可以轻松地在python中加载例如np.loadtxt('test.txt')
的数据。
我认为它在bash中最容易,但python也没关系。
感谢您的帮助。
答案 0 :(得分:3)
您使用bash
标记了问题,因此您可以在shell中尝试使用此sed one-liner:
sed '1,3s/^/#/' file
如果您想“就地”进行更改:添加-i
sed -i '1,3s/^/#/' file
修改强>
如果已经领先#
sed '1,3{/^#/!s/^/#/}'
答案 1 :(得分:1)
如果您想使用awk
,这可以有效:
awk '(NR<=3 && !/^#/) {$0="#"$0} {print}' your_file
(NR<=3 && !/^#/)
代表行数&lt; = 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