0

私は最近、プログラム mothur のスクリプトのようなパイプラインを生成するために、win7 で powershell を使い始めました。これを行うためにubuntuでbashスクリプトを使用する前に。1つのタスクを除いて、すべてがうまく機能していることを嬉しく思います:

次の形式の fasta ファイルをフォーマットしたいと思います。

filename.fasta:

>HXXC990
AGTTCAAGGTCTCT
>HXXC991
GGGTTTCAAATCTC
>HXXC992
GGGTCTCTCCTATA

タブ区切りでこんな感じのファイルに

output.file:

HXXC990    filename
HXXC991    filename
HXXC992    filename

出力ファイルの最初の列に、">" 記号のない名前が含まれていることが重要です。2 番目のタブ区切りの列は、接尾辞 (「ファイル名」) のない元の filename.fasta です。ファイルのベース名を読み取るソリューションgciと、>で始まるすべての行を出力するSelect-Stringがあります。唯一の問題は、2 つの列の書式設定と、2 列目のファイル名の繰り返しです。

私はこれまでに試しました:

Select-String '>' .\filename.fasta | % {$_.Line} | set-content output.txt

">" 記号を含む行のみを含むファイルを生成します。その後、私はそれらを交換しました。私が手に入れたファイル名

$base1 = gci filename.fasta | % {$_.BaseName}
4

2 に答える 2

0

これを試して:

select-string '^>' filename.fasta | % {
  $_ -replace '^.*\\(.*?)\.fasta:\d+:>(.*)$', "`$2`t`$1"
} > output.file

^>正規表現はだけでなく である必要があることに注意してください>。後者は>、行のどこにでも一致します。

これは、次のように複数のファイルに適用できます。

$recurse = $false

Get-ChildItem "C:\base\folder" -Filter *.fasta -Recurse:$recurse `
  | select-string '^>' `
  | % { $_ -replace '^.*\\(.*?)\.fasta:\d+:>(.*)$', "`$2`t`$1" } > output.file
于 2013-04-06T12:31:43.540 に答える
0

関連する操作のいくつかの異なるオプションを示す別のソリューションを次に示します。

gci *.fasta | select-string '^>(.+)' |
 % {"{0}`t{1}" -f $_.matches.groups[1],$_.filename.split('.')[0]} |
 Set-Content output.file
于 2013-04-06T15:44:30.643 に答える