特定の列を抽出する方法

特定の列を抽出する方法

データセットがあり、Linuxを使用して特定の列を抽出する必要があります。

次の列があります

1,2,3,4,5,6,7,8,9,10

1列を維持して2列を選択し、3,4,5をスキップし、6列を選択し、7,8,9をスキップして10列を選択するように続けて3列をスキップしたいので毎回リストをスキップしたいです。

これはデータの一部です

Composite Element REF   Beta_value  Gene_Symbol Chromosome  Genomic_Coordinate  Beta_value  Gene_Symbol Chromosome  Genomic_Coordinate
cg00000029  0.188204193 RBL2    16  53468112    0.166988369 RBL2    16  53468112
cg00000108  NA  C3orf35 3   37459206    NA  C3orf35 3   37459206
cg00000109  NA  FNDC3B  3   171916037   NA  FNDC3B  3   171916037
cg00000165  0.111512805 NA  1   91194674    0.542004657 NA  1   91194674
cg00000236  0.938647003 VDAC3   8   42263294    0.935845645 VDAC3   8   42263294
cg00000289  0.633428798 ACTN1   14  69341139    0.733281344 ACTN1   14  69341139
cg00000292  0.65556936  ATP2A1  16  28890100    0.358096457 ATP2A1  16  28890100
cg00000321  0.191278127 SFRP1   8   41167802    0.509407035 SFRP1   8   41167802
cg00000363  0.135746609 NA  1   230560793   0.120685168 NA  1   230560793
cg00000622  0.017719646 NIPA2   15  23034447    0.018611505 NIPA2   15  23034447
cg00000658  0.891647766 MAN1B1  9   139997924   0.904048927 MAN1B1  9   139997924
cg00000714  0.061226142 TSEN34  19  54695678    0.071011447 TSEN34  19  54695678
cg00000721  0.950283919 LRRC16A 6   25282779    0.952309685 LRRC16A 6   25282779
cg00000734  0.058200906 CNBP    3   128902377   0.05981105  CNBP    3   128902377
cg00000769  0.025102512 DDX55   12  124086477   0.028169739 DDX55   12  124086477

最初の列「Composite Element REF」を維持してからBeta_Valueのみを選択する必要があるため、列2、次の列6など合計1373列になります。

ありがとう

答え1

あなたの質問にいくつかの詳細がありません。私の考えでは、テキストファイルやパイプで見つかったと思います。

フィルタ列を使用する迅速で汚い方法は次のとおりです。awk

あなたの質問は非常に基本的なので、次に焦点を当てます。

$ echo "1,2,3,4,5,6,7,8,9,10" |awk -F, '{print $1 "," $2 "," $6 "," $10;}'
1,2,6,10

カンマはフィールド区切り記号として宣言する必要があります-F,。 1列と2列のフル入力になります
$0
$1
$2


入力データが例と異なる場合は、より具体的に説明してください。

答え2

awkベースのソリューションの場合:

awk -v FS=, -v OFS=, '{ printf $1; for(i=2;i<=NF;i+=4) { printf OFS $i }; print "";}' marwah.input

答え3

[現在のスペースで区切られたサンプルデータに基づいています。]

配列スライシングを使用し、perlいくつかのモジュラー演算を使用してインデックスを選択できますgrep

perl -anle 'print join "\t", $F[0], @F[grep { !($_ % 4 - 1) } 1..$#F]' file

答え4

sed -E 's/(,[^,]*)(,[^,]*){3}/\1/g' yourfile.txt

列1、2、6、10、14、18などは保持されます。これがあなたが期待していたことを願っています。

関連情報