テキストファイルの列iを増加する数字に置き換える

テキストファイルの列iを増加する数字に置き換える

これと非常によく似た作業を行う必要があります。文字列を順次インデックスに置き換えるしかし、列に数字を追加する代わりに、列全体を増加する数字に置き換えます。このように:

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

おすすめ記事