それぞれ7つの列を持つほぼ160のtxtファイルがあります。最初と6番目の列データ(Geneid、Length)は各ファイルで同じであるため、最終ファイルの最初と2番目の列にして7番目の列データ(sample1、sample2、sample3...)を抽出したいと思います。 .) 最終ファイルに入れます。
例:
サンプル1:
Geneid Chr Start End Strand Length Sample1
ENSG00000223972.5 Chr1 34554 12227 ++ 1735 0
ENSG00000227232.5 Chr2 14404 1450 ++ 1351 12
ENSG00000278267.1 Chr3 17369 17436 ++ 68 20
ENSG00000243485.4 Chr4 29554 3003 ++ 1021 0
ENSG00000237613.2 Chr5 14404 35174 ++ 1219 0
サンプル2:
Geneid Chr Start End Strand Length Sample2
ENSG00000223972.5 Chr1 11869 1450 ++ 1735 180
ENSG00000227232.5 Chr2 14404 17436 ++ 1351 40
ENSG00000278267.1 Chr3 17369 17436 ++ 68 9
ENSG00000243485.4 Chr4 14404 3003 ++ 1021 49
ENSG00000237613.2 Chr5 17369 3003 ++ 1219 3
サンプル3:
Geneid Chr Start End Strand Length Sample3
ENSG00000223972.5 Chr1 17369 1450 ++ 1735 11
ENSG00000227232.5 Chr2 29554 17436 ++ 1351 156
ENSG00000278267.1 Chr3 34554 3003 ++ 68 56
ENSG00000243485.4 Chr4 14404 3003 ++ 1021 89
ENSG00000237613.2 Chr5 17369 35174 ++ 1219 23
最終出力は次のようにする必要があります
Geneid Length Sample1 Sample2 Sample3
ENSG00000223972.5 1735 0 180 11
ENSG00000227232.5 1351 12 40 156
ENSG00000278267.1 68 20 9 56
ENSG00000243485.4 1021 0 49 89
ENSG00000237613.2 1219 0 3 23
答え1
(修正された質問の場合)awk
と一緒に使用してください。paste
awk '{printf("%s\t%s", $1, $6);
for(i=7;i<=NF;i+=7) printf ("\t%s", $i); printf "\n"}' <(paste files) >final_file
添付:printf
フィールドの実際の値に基づいて書式コントロールを変更します。
説明する:
{printf ("%s\t%s" ,$1, $6)}
1列と6列を最初に印刷します。for(i=7;i<=NF;i+=7) printf ("\t%s", $i);
その後、残りのフィールドを繰り返し、列7とモジュール7を持つすべてのフィールドのみを印刷します。まず、すべてを
files
一緒に貼り付けてから渡しますawk
。つまり、複数のファイル名を指定するfiles
ことができ、すべてのファイルはそのファイル名で始まり、その後に何でも付けられます。paste
myfiles*
myfiles