私遺伝子型、ファイル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