我正在使用Mac,并希望使用Bash,R或python 3进行重新格式化任务。
以下是我正在使用的表格的一个小示例。该表长达数千行,每行具有可变数量的列。此外,该示例包含在Isofrorm_之后开始的12个逗号分隔值,但为了便于阅读,我将其减少为4。
ENSMUSG0000001234 2.0 Isoform1_0.9,0.0,0.6,1.3 Isoform2_0.1,0.0,0.0,0.5
ENSMUSG0000005555 1.0 Isoform1_0.5,0.1,0.4,1.0 Isoform2_0.7,0.3,0.0,0.1 Isoform3_0.3,9.9,2.0,3.0
我希望能够搜索并重新格式化以下内容。要提取感兴趣的行,我可以使用
grep "ENSMUSG0000001234" ./filename
但我没有足够的经验知道如何通过位置和各种分隔符提取值并正确组织输出。我认为python可能是最好的工具,但我是一个python新手。
我需要重新格式化的条目看起来像下面的
0.9 0.0 0.6 1.3
0.1 0.0 0.0 0.5
为清楚起见,它的rownames和列名是
IsoformID Cell1 Cell2 Cell3 Cell4
Isoform1 0.9 0.0 0.6 1.3
Isoform2 0.1 0.0 0.0 0.5
非常感谢任何帮助。
答案 0 :(得分:1)
我看到您的优先解决方案是Bash
,R
或Python 3
,但这是我可以在php
中为您提供问题的快速解决方案。< / p>
您可以将以下脚本保存到文件中,例如:reformat.php
<?php
$infile = $argv[1];
$handle = fopen($infile, "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
$data = explode(' ', trim($line));
print $data[0] . '-' . $data[1] . "\n";
foreach (array_slice($data, 2) as $row) {
print str_replace(['_', ','], ' ' , $row) . "\n";
}
}
fclose($handle);
} else {
exit("Unable to open file ($finfile)");
}
然后以下列方式从命令行运行它:
php reformat.php your_data_file
脚本逐行读取和处理您的文件。我使用前两个空格分隔字段作为块标识符。之后,我处理行中的其余字段(array_slice($data, 2)
)。
输出:
ENSMUSG0000001234-2.0
Isoform1 0.9 0.0 0.6 1.3
Isoform2 0.1 0.0 0.0 0.5
ENSMUSG0000005555-1.0
Isoform1 0.5 0.1 0.4 1.0
Isoform2 0.7 0.3 0.0 0.1
Isoform3 0.3 9.9 2.0 3.0
<强>更新强>
我试图找出如何使用python
实现目标。我提出了以下解决方案。
#!/usr/bin/python
with open("input.txt") as f:
for line in f:
row = line.strip().split(' ')
print row[0] + '-' + row[1]
for data in row[2:]:
print data.replace('_', ' ').replace(',', ' ')
这将产生如上所示的相同输出。