小编use*_*607的帖子

如何在制表符上拆分Perl中的变量?

我有一个$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)

我究竟做错了什么?

perl

2
推荐指数
1
解决办法
2万
查看次数

在bash中读取多个文件

我有两个.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)

bash sed

2
推荐指数
2
解决办法
909
查看次数

linux:从文件中提取模式

我有一个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',但我不知道从哪里开始.

linux awk sed

2
推荐指数
1
解决办法
271
查看次数

perl split函数使用两个分隔符

我正在阅读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也拆分为'.'.如何修改我的分割功能呢?

perl

1
推荐指数
1
解决办法
1285
查看次数

每组总和不同的值

我有一个制表符分隔的文件(带有标题行),其中我想根据另一列的数据的存在来计算一些值的总和.

这是我的表格的样子:

 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.

perl

0
推荐指数
1
解决办法
117
查看次数

linux bash sed-command with variable

我在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)

但这似乎不起作用.我究竟做错了什么?

linux bash shell sed

0
推荐指数
1
解决办法
209
查看次数

perl:列中的反向值

我有一个带有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)

perl

-1
推荐指数
1
解决办法
70
查看次数

标签 统计

perl ×4

sed ×3

bash ×2

linux ×2

awk ×1

shell ×1