나는유전자형.파일317개의 열(1, 2, 3, ..., 317)이 있습니다. 아래 예에서는 처음 몇 개의 열만 표시하고 있습니다!
입력하다 genotype.file
:
Chr00c0002 56240 N N N A N A N N N N N A
Chr00c0040 55087 N N N C N N N N N N N N
Chr00c0041 24730 N N N A N A N N N N N N
...
나는 단지 그것들을 각각의 count.files
.
cat count.file.1
51
92
166
169
196
199
213
228
229
284
291
297
그래서 첫 번째로는카운트 파일51, 92, 166, 169열만 유지하고 싶습니다.유전자형.파일.
답변1
genotype.file
파일이 탭으로 구분되어 있다고 가정합니다 .
cut -f $(tr '\n' ',' <count.file.1 | sed 's/,$//') genotype.file
명령 대체는 입력 파일에서 잘라낼 $( tr ... | sed ... )
쉼표로 구분된 열 번호 목록을 생성합니다.cut
파일 tr
의 모든 개행 문자를 쉼표로 바꾸고 끝에 있는 추가 쉼표를 제거합니다 count.file.1
.sed
샘플 데이터를 기반으로 생성된 명령은 다음과 같습니다.
cut -f 51,92,166,169,196,199,213,228,229,284,291,297 genotype.file
파일을 반복합니다 count.file.*
.
for cfile in count.file.*; do
cut -f $(tr '\n' ',' <"$cfile" | sed 's/,$//') genotype.file >genotype-"${cfile##*.}"
done
그러면 이라는 새 파일이 생성됩니다. 여기서 는 genotype-N
파일을 생성하는 데 사용된 파일에 N
해당하는 번호 입니다. 파일 이름 끝부분에서 번호가 추출됩니다.count.file.N
genotype.file
의 genotype.file
경우아니요탭으로 구분된 경우 탭으로 구분되도록 설정할 수 있습니다.
tr -s ' ' '\t' <genotype.file >genotype.tsv
이는 원본 파일의 열이 공백으로만 구분되어 있다고 가정합니다. 이 tr
명령은 여러 개의 연속 공백을 탭 문자로 바꿉니다. 결과는 새 파일로 리디렉션됩니다. cut
이 새 파일에 대해 위 명령을 사용할 수 있습니다 .
사용awk
awk 'NR == FNR { c[++n] = $0; next } { t=$c[1]; for (i=2; i<=n; ++i) t = t OFS $c[i]; print t }' count.file.1 genotype.file
이는 먼저 배열로 count.file.1
추출하려는 열을 읽은 다음 읽을 때 이 열 번호를 사용하여 데이터를 추출합니다. 선택한 열에서 생성된 출력 행을 보유하는 임시 변수입니다.genotype.file
c
genotype.file
t
파일을 반복합니다 count.file.*
.
for cfile in count.file.*; do
awk 'NR == FNR { c[++n] = $0; next } { t=$c[1]; for (i=2; i<=n; ++i) t = t OFS $c[i]; print t }' \
"$cfile" genotype.file >genotype-"${cfile##*.}"
done
그러면 솔루션 genotype-N
과 동일한 방식 으로 호출되는 새 파일이 생성됩니다 .cut
답변2
awk
간단한 스크립트에만 사용됩니다.
awk '{ printf "{ print ";for(i=1; i<NF; i++){ printf "$%d, ",$i};
print "$"$i" }" }' <<< "$(awk '{printf $0" "}' count.file.{1..50})" >genotype.awk
그러면 모든 파일에서 모든 열 번호를 awk
수집하는 아래와 같은 스크립트가 생성됩니다 . 우리는 사용했었다genotype.awk
count.file.{1..50}
Brace Expansion
여기에서 50개 파일을 모두 읽어보세요 awk
.
{ print $51, $92, $166, $169, $196, $199, $213, $228, $229, $284, $291, $297, ... }
용법:
awk -f genotype.awk genotype.file
그러면 파일에서 genotype.awk
스크립트가 실행 genotype.file
되고 포함된 열 번호만 인쇄됩니다.