私遺伝子型、ファイル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
番号のみが印刷されます。