私はこれに非常に似たことをする必要があります連続インデックスで文字列を置換するただし、列に数字を追加する必要はなく、列全体を増分する数字に置き換える必要があります。次のようになります。
0 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
0 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
0 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
0 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
0 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
なる
0 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
1 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
2 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
(0から始まるか1から始まるかは関係ありません)
とてもバカな気がしますが、その質問の解決策を自分のケースに当てはめることはできません...
答え1
行に番号を付けるには、 を使用しますnl
。列を削除するには (または、保持したい列をフィルターで除外するには)、 を使用しますcut
。
$ cut -f 2- cols.txt | nl
1 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
2 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
5 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
唯一の厄介な点nl
は、行の先頭にスペース パディングが挿入されることです (デフォルトでは、行番号フィールドの幅は 6 文字ですが、行番号が切り捨てられるため、これを小さくすることは望ましくありません)。次のようにして、これらを取り除くことができます。
$ cut -f 2- cols.txt | nl | sed 's/^ *//'
1 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
2 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
5 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
このcut
ユーティリティは、入力から「切り取る」列のリストを受け取ります。この場合、列 2 以降 ( -f 2-
) です。データはタブ区切りなので、cut
はこれを変更せずに実行しますが、それ以外の場合は で別の区切り文字を使用するように指示できます-d
。
このsed
コマンドは、行の先頭のスペースを単にnl
何もないものに置き換えます。
答え2
とawk
$ awk '{$1=FNR-1; print}' OFS='\t' file
0 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
1 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
2 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
答え3
(置換ではリテラルed
タブをCtrl-V+として使用)TAB
$ ed -s file << EOF
,s/0 //
,n
q
EOF
1 0 chr1 3000575 3000801 0 chr1 4340023 4340249 32 32
2 0 chr1 3000641 3000801 -1 chr1 3311943 3311783 32 32
3 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
4 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
5 0 chr1 3000674 3000801 -1 chr1 3001534 3001407 32 32
この(.,.)n
コマンドは、アドレス指定された行を出力します。各行の前に行番号とタブが付きます。タブ区切り形式に最適です。