我有一个不同文件名的输出:file_1.dat..file_15.dat
我正在使用此命令:
paste result_*.dat | column -s $'\t' -t >> cache/Final_Evolution.dat
Run Code Online (Sandbox Code Playgroud)
但我的输出文件以这种方式排序,我不知道为什么:
file_1.dat
file_11.dat
file_13.dat
file_15.dat
file_3.dat
file_5.dat
file_7.dat
file_9.dat
Run Code Online (Sandbox Code Playgroud)
所以,当我使用上面提到的命令时,数据列的顺序是1,11,13 ...当我想要1,3,5,7 ......
非常感谢你提前.
在我的Rscripts中,通常,我使用最简单的方法来加载文件.
data1 <- read.table("~/user/document/data/cache/distances.dat", quote="\"", comment.char="")
Run Code Online (Sandbox Code Playgroud)
但是我想在其他计算机上使用这个脚本,因此路径会改变.
缓存目录始终与文件距离一致.在我的Bash脚本中,我使用它来避免这个问题:
WORKING_DIRECTORY=`pwd`/cache
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在R中使用它.
我想要的是:
data1 <- read.table("'pwd'/cache/distances.dat", quote="\"", comment.char="")
Run Code Online (Sandbox Code Playgroud) 我正在处理许多字符串,例如这个结构:
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22493.xml;spectrum=4691 true LHDEEIQELQAQIQEQHVQIDMDVSKPDLTAALR 3940.8833 1 9913 0.9988012901749596
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22495.xml;spectrum=752 true LHDEEIQELQAQIQEQHVQIDMDVSKPDLTAALR 3940.8833 1 9913 0.9988012901749596
Run Code Online (Sandbox Code Playgroud)
由于程序中存在生成文件的错误,有时会出现额外的分号,只有一个分号出现在它们不应出现的位置.例如:
=Cluster=
SPEC PRD000681;;;;;PRIDE_Exp_Complete_Ac_22493.xml;spectrum=4691 true LHDEEIQELQAQIQEQHVQIDMDVSKPDLTAALR 3940.8833 1 9913 ; 0.9988012901749596
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22495.xml;;;;spectrum=752 true LHDEEIQELQAQIQEQHVQIDMDVSKPDLTAALR 3940.8833 1 9913 ; 0.9988012901749596
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我使用正则表达式s/;+/;/g;,awk '{gsub(/[;]+/,";")}1'input > output但我不知道如何删除最后一个分号而不影响第一个分号.
一个好的输出将是这样的:
=Cluster=
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22493.xml;spectrum=4691 true LHDEEIQELQAQIQEQHVQIDMDVSKPDLTAALR 3940.8833 1 9913 0.9988012901749596
SPEC PRD000681;PRIDE_Exp_Complete_Ac_22495.xml;spectrum=752 true LHDEEIQELQAQIQEQHVQIDMDVSKPDLTAALR 3940.8833 1 9913 0.9988012901749596
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何在不影响第一个分号的情况下删除最后一个分号?
我正在做一个子程序,它以数字列表作为参数.我想做的是检查该列表中是否有重复值.如果有重复的数字,请打印一条消息并停止该程序.如果没有重复的数字,继续执行.
例如:
if (there_is_number_repeated){
print "There is a number repeated";}
else{
run this code...}
Run Code Online (Sandbox Code Playgroud)
我试图用这个列表的值创建一个哈希值,然后检查是否有值> 1.
use strict;
use warnings;
sub name_subroutine{
my (@numbers)=@_;
my $n=scalar(@numbers);
my %table=();
foreach my $i(@numbers){
if (exists $tabla{$i}){
$tabla{$i}+=1;}
else{
$tabla{$i} = 1;
}
my @values = values %tabla;
}
}
Run Code Online (Sandbox Code Playgroud)
它在这里,我不知道继续.有没有办法以业余的方式做到这一点?我是Perl的新手.
谢谢!