形式を変更せずにファイルから列を削除する方法は?

形式を変更せずにファイルから列を削除する方法は?

次のように、ファイルから最初の列を削除する必要があります。

165 1   chr22   42090593    0   1   chr22   42090609    1   42  42
166 1   chr22   42090593    0   1   chr22   42090654    1   42  42
167 1   chr22   42090595    0   1   chr22   42090633    1   42  42
168 0   chr22   42090612    0   1   chr22   42090656    1   42  42
169 0   chr22   42090614    0   0   chr22   42090617    1   40  42
170 0   chr22   42090647    0   1   chr22   42090749    1   42  42
171 1   chr22   42090684    0   1   chr22   42090692    1   42  42
172 1   chr22   42090733    0   1   chr22   42090743    1   42  42
173 1   chr22   42090733    0   1   chr22   42090775    1   42  42
174 1   chr22   42090733    0   1   chr22   42090789    1   42  42
175 1   chr22   42090757    0   1   chr22   42090787    1   42  24
176 0   chr22   42090778    0   0   chr22   42090790    1   42  42
177 0   chr22   42090800    0   0   chr22   42090802    1   42  42
178 0   chr22   42090803    0   0   chr22   42090806    1   42  42

注文する

awk '{$1=""; print $0}'

最初の列を正しく削除しますが、この方法で型を変更します。

1 chr22 51178322 0 0 chr22 51178659 1 42 42
0 chr22 51178661 0 0 chr22 51178663 1 42 42
0 chr22 51178667 0 1 chr22 51178790 1 42 23
1 chr22 51178755 0 0 chr22 51178764 1 42 42
0 chr22 51178808 0 1 chr22 51178871 1 42 42
1 chr22 51178869 0 1 chr22 51178895 1 42 42
1 chr22 51178881 0 1 chr22 51178893 1 42 42
1 chr22 51178881 0 1 chr22 51178895 1 42 42
1 chr22 51179213 0 1 chr22 51179213 1 42 42
1 chr22 51180087 0 1 chr22 51180093 1 42 42
1 chr22 51180134 0 0 chr22 51181889 1 42 42
0 chr22 51186192 0 0 chr22 51186192 1 42 42
0 chr22 51186192 0 0 chr22 51186192 1 42 42

どんなアイデアがありますか?

ベストアンサー1

あなたのアプローチには2つの問題があります。まず、これはタブ区切りファイルのように見え、awkにタブを使用するように指示しませんでした。次に、awkでフィールドを設定するときに""フィールドを削除するのではなく、消去するだけです。したがって、それでも印刷されるので、出力の各行の先頭に余分なスペースがあります。

したがって、awkでこれを行うには、次のことが必要です(例の先行スペースは実際にはファイルの一部ではないと仮定します)。

$ awk -F"\t" 'BEGIN{OFS="\t"}{for(i=2;i<NF;i++){printf "%s%s",$i,OFS} print $NF}' file 
1   chr22   42090593    0   1   chr22   42090609    1   42  42
1   chr22   42090593    0   1   chr22   42090654    1   42  42
1   chr22   42090595    0   1   chr22   42090633    1   42  42
0   chr22   42090612    0   1   chr22   42090656    1   42  42
0   chr22   42090614    0   0   chr22   42090617    1   40  42
0   chr22   42090647    0   1   chr22   42090749    1   42  42
1   chr22   42090684    0   1   chr22   42090692    1   42  42
1   chr22   42090733    0   1   chr22   42090743    1   42  42
1   chr22   42090733    0   1   chr22   42090775    1   42  42
1   chr22   42090733    0   1   chr22   42090789    1   42  42
1   chr22   42090757    0   1   chr22   42090787    1   42  24
0   chr22   42090778    0   0   chr22   42090790    1   42  42
0   chr22   42090800    0   0   chr22   42090802    1   42  42
0   chr22   42090803    0   0   chr22   42090806    1   42  42

しかし、次のような他のツールはcut すでに言及ここはもっと簡単です。ファイルがタブで区切られている場合は、次のことができます。

$ cut -f2- file 
1   chr22   42090593    0   1   chr22   42090609    1   42  42
1   chr22   42090593    0   1   chr22   42090654    1   42  42
1   chr22   42090595    0   1   chr22   42090633    1   42  42
0   chr22   42090612    0   1   chr22   42090656    1   42  42
0   chr22   42090614    0   0   chr22   42090617    1   40  42
0   chr22   42090647    0   1   chr22   42090749    1   42  42
1   chr22   42090684    0   1   chr22   42090692    1   42  42
1   chr22   42090733    0   1   chr22   42090743    1   42  42
1   chr22   42090733    0   1   chr22   42090775    1   42  42
1   chr22   42090733    0   1   chr22   42090789    1   42  42
1   chr22   42090757    0   1   chr22   42090787    1   42  24
0   chr22   42090778    0   0   chr22   42090790    1   42  42
0   chr22   42090800    0   0   chr22   42090802    1   42  42
0   chr22   42090803    0   0   chr22   42090806    1   42  42

他の選択肢:

$ grep -oP '^\s*\S+\s*\K.*' file 
1   chr22   42090593    0   1   chr22   42090609    1   42  42
1   chr22   42090593    0   1   chr22   42090654    1   42  42
1   chr22   42090595    0   1   chr22   42090633    1   42  42
0   chr22   42090612    0   1   chr22   42090656    1   42  42
0   chr22   42090614    0   0   chr22   42090617    1   40  42
0   chr22   42090647    0   1   chr22   42090749    1   42  42
1   chr22   42090684    0   1   chr22   42090692    1   42  42
1   chr22   42090733    0   1   chr22   42090743    1   42  42
1   chr22   42090733    0   1   chr22   42090775    1   42  42
1   chr22   42090733    0   1   chr22   42090789    1   42  42
1   chr22   42090757    0   1   chr22   42090787    1   42  24
0   chr22   42090778    0   0   chr22   42090790    1   42  42
0   chr22   42090800    0   0   chr22   42090802    1   42  42
0   chr22   42090803    0   0   chr22   42090806    1   42  42

または

$ perl -pe 's/^\s*\S+\s*//' file 
1   chr22   42090593    0   1   chr22   42090609    1   42  42
1   chr22   42090593    0   1   chr22   42090654    1   42  42
1   chr22   42090595    0   1   chr22   42090633    1   42  42
0   chr22   42090612    0   1   chr22   42090656    1   42  42
0   chr22   42090614    0   0   chr22   42090617    1   40  42
0   chr22   42090647    0   1   chr22   42090749    1   42  42
1   chr22   42090684    0   1   chr22   42090692    1   42  42
1   chr22   42090733    0   1   chr22   42090743    1   42  42
1   chr22   42090733    0   1   chr22   42090775    1   42  42
1   chr22   42090733    0   1   chr22   42090789    1   42  42
1   chr22   42090757    0   1   chr22   42090787    1   42  24
0   chr22   42090778    0   0   chr22   42090790    1   42  42
0   chr22   42090800    0   0   chr22   42090802    1   42  42
0   chr22   42090803    0   0   chr22   42090806    1   42  42

または

$ perl -F'\t' -lane 'print join "\t",@F[1..$#F]' file 
1   chr22   42090593    0   1   chr22   42090609    1   42  42
1   chr22   42090593    0   1   chr22   42090654    1   42  42
1   chr22   42090595    0   1   chr22   42090633    1   42  42
0   chr22   42090612    0   1   chr22   42090656    1   42  42
0   chr22   42090614    0   0   chr22   42090617    1   40  42
0   chr22   42090647    0   1   chr22   42090749    1   42  42
1   chr22   42090684    0   1   chr22   42090692    1   42  42
1   chr22   42090733    0   1   chr22   42090743    1   42  42
1   chr22   42090733    0   1   chr22   42090775    1   42  42
1   chr22   42090733    0   1   chr22   42090789    1   42  42
1   chr22   42090757    0   1   chr22   42090787    1   42  24
0   chr22   42090778    0   0   chr22   42090790    1   42  42
0   chr22   42090800    0   0   chr22   42090802    1   42  42
0   chr22   42090803    0   0   chr22   42090806    1   42  42

おすすめ記事