最初のファイルの列番号が2番目のファイルの列番号と一致する列のみを保持します。

最初のファイルの列番号が2番目のファイルの列番号と一致する列のみを保持します。

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

サンプルデータに基づいて生成されたコマンドは次のとおりです。

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.Ngenotype.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.filecgenotype.filet

ファイルを繰り返します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

おすすめ記事