我有一个$results由以下foreach循环生成的变量
my $result = "";
foreach $c1(sort {$a<=>$b} keys %info ) {
$result .= $c1 . "\t" .
join(',',@{$info{$c1}->{var1}}) . "\t" .
join(',',@{$info{$c1}->{var2}}) . "\n";
}
Run Code Online (Sandbox Code Playgroud)
如果我打印结果,它看起来像这样
a b c
c d e
f g h
Run Code Online (Sandbox Code Playgroud)
因此,有三列分隔,\t并且行分隔\n.我现在想要$results通过制表符拆分此变量,最后得到3列.我尝试使用while循环执行此操作,但它不起作用
while($result){
my @columns = split("\t");
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有两个.txt文件,我想在.sh脚本中同时读取每行的行数.两个.txt文件都有相同的行数.在循环内部我想使用sed-command来更改另一个文件中的full_sample_name和sample_name.我知道如果你只是阅读一个文件,它是如何工作的,但我不能让它适用于两个文件.
#! /bin/bash
FULL_SAMPLE="file1.txt"
SAMPLE="file2.txt"
while read ... && ...
do
sed -e "s/\<full_sample_name\>/$FULL_SAMPLE/g" -e "s/\<sample_name\>/$SAMPLE/g" pipeline.sh > $SAMPLE.sh
done < ...?
Run Code Online (Sandbox Code Playgroud) 我有一个4列大的制表符分隔.txt文件
col1 col2 col3 col4
name1 1 2 ens|name1,ccds|name2,ref|name3,ref|name4
name2 3 10 ref|name5,ref|name6
... ... ... ...
Run Code Online (Sandbox Code Playgroud)
现在我想从这个文件中提取以'ref |'开头的所有内容.此模式仅存在于col4中
所以对于这个例子,我希望得到输出
ref|name3
ref|name4
ref|name5
ref|name6
Run Code Online (Sandbox Code Playgroud)
我想过为这个使用'sed',但我不知道从哪里开始.
我正在阅读Perl中的文件,我想根据两个分隔符拆分值.
col1 col2
uc011nbb.2 NM_001039567
uc004fuo.4 NM_001006120
uc011nbc.2 NM_001006121
uc010nwz.3 NM_001006121
Run Code Online (Sandbox Code Playgroud)
col 1和col2由制表符分隔,所以我通常使用这个:
my @cols = split(/\t/);
Run Code Online (Sandbox Code Playgroud)
但是,我想将col1也拆分为'.'.如何修改我的分割功能呢?
我有一个制表符分隔的文件(带有标题行),其中我想根据另一列的数据的存在来计算一些值的总和.
这是我的表格的样子:
C1 C2 C3 C4
a x e 1
b x 3
c y 1
d z f 4
Run Code Online (Sandbox Code Playgroud)
对于C2中的所有相同值,我想在C3中得到相应值的总和.所以新表应该如下所示:
C1 C2 C3 C4 C5
a x e 1 4
b x 3 4
c y 1 1
d z f 4 4
Run Code Online (Sandbox Code Playgroud)
所以我想保留我的表的原始结构(列C1,C2,C3,C4和相同的行数),但最后我想添加另一列,在这种情况下,对于行a和b,来自C4总结并放入C5,因为C2的值是相同的.线c和d的C5值与C4相同,因为C2中的y和z是唯一的.
任何人都可以帮我在Perl中如何做到这一点?我想我应该遍历文件并创建一个变量$ sum,通过遍历每一行,他将C4的数量相加,然后放入C5.
我在linux bash".sh"脚本中有一个变量
$data="test_1"
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个新变量($ name),它只包含下划线之前的$ data部分,所以
$name="test"
Run Code Online (Sandbox Code Playgroud)
我想用sed这样做
name=$(echo "$dataset" | sed 's/_.*//');
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.我究竟做错了什么?
我有一个带有4列的制表符分隔表(table1),看起来像这样
A + 1 1
A + 2 2
A + 3 3
B - 2 4
B - 3 5
B - 4 6
B - 5 7
C + 1 8
C + 2 9
C + 3 10
D - 1 11
D - 2 12
D - 3 13
Run Code Online (Sandbox Code Playgroud)
col1中的字母定义组.现在,如果col2中有一个"+",我只想保持原样.如果在col2中有" - ",我想要反转col3中的值,对于属于col1定义的组的所有行.对于此示例,输出应如下所示
A + 1 1
A + 2 2
A + 3 3
B - 5 4
B - 4 5
B - 3 6 …Run Code Online (Sandbox Code Playgroud)