-3

最初の 3 行が単なるヘッダーであるファイルがいくつかあります。しかし、私がそれらを読むには、. のように先頭にコメント記号が必要#です。私のファイルが呼び出された場合test.txt(以下に例を示します) #、最初の 3 行だけに a を追加するにはどうすればよいですか#

A    B    C    D
1    2    3    4

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

最初の 3 行の後に、実際のデータがあります。だから私はそれが欲しい:

#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ので、シェルでこの 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 に答える