我有一个数据集,我需要使用 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 等。我希望这正是您所期望的。