我最近刚刚开始在win7中使用powershell,以便为程序mothur生成类似于管道的脚本。在我使用ubuntu中的bash脚本来做这件事之前。我很高兴现在一切都很好,除了一项任务:
我想格式化一个fasta文件,格式如下:
filename.fasta:
>HXXC990
AGTTCAAGGTCTCT
>HXXC991
GGGTTTCAAATCTC
>HXXC992
GGGTCTCTCCTATA添加到以制表符分隔的文件,如下所示
output.file:
HXXC990 filename
HXXC991 filename
HXXC992 filename输出文件的第一列必须包含不带">"-signs的名称,这一点很重要。第二个按制表符分隔的列是不带后缀的原始文件名(“filename.fasta”)。我让解决方案gci读出文件的基本名称,并使用Select-String输出所有以">“开头的行。唯一的问题仍然是两列中的格式和第二列中不断重复的文件名。
到目前为止我已经尝试过了:
Select-String '>' .\filename.fasta | % {$_.Line} | set-content output.txt生成一个只包含包含">“符号的行的文件。之后我就把它们换掉了。我得到的文件名是
$base1 = gci filename.fasta | % {$_.BaseName}发布于 2013-04-06 20:31:44
试试这个:
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-06 23:44:31
这里是另一个解决方案,显示了涉及到的操作的一些不同选项:
gci *.fasta | select-string '^>(.+)' |
% {"{0}`t{1}" -f $_.matches.groups[1],$_.filename.split('.')[0]} |
Set-Content output.filehttps://stackoverflow.com/questions/15850047
复制相似问题