如何提取某些列

如何提取某些列

我有一个数据集,我需要使用 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,将逗号声明为字段分隔符。将是第一列第二列的
$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 等。我希望这正是您所期望的。

相关内容