특정 열을 추출하는 방법

특정 열을 추출하는 방법

데이터 세트가 있고 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 등은 유지됩니다. 이것이 당신이 기대했던 것이기를 바랍니다.

관련 정보