小编Ste*_*eve的帖子

awk对一列进行求和,并在每行输入上打印该总和

file.txt看起来像这样:

1 12
2 18
3 45
4 5
5 71
6 96
7 13
8 12
Run Code Online (Sandbox Code Playgroud)

我可以这样总结第二列:

awk '{ sum += $2 } END { print sum }' file.txt

272

我能在每一行打印这笔钱的最好方法是什么?这就是我所期待的:

1 12 272
2 18 272
3 45 272
4 5 272
5 71 272
6 96 272
7 13 272
8 12 272
Run Code Online (Sandbox Code Playgroud)

bash awk printf sed

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

需要grep第一次出现多个字符串

我试图返回第一次出现多个字符串,即我想从下面的文本中选择第一次出现1259,3009和1589的行.

ADWN    1259    11:00   B23

ADWN    3009    12:00   B19

DDWN     723    11:30   B04

ADWN    1589    14:20   B12

ADWN    1259    11:10   B23

DDWN    2534    13:00   B16

ADWN    3009    11:50   B14
Run Code Online (Sandbox Code Playgroud)

这给了我所有的比赛:

grep '1259\|3009\|1589'  somelog.log
Run Code Online (Sandbox Code Playgroud)

而这只给了我第一场比赛

grep -m 1  '1259\|3009\|1589'  somelog.log
Run Code Online (Sandbox Code Playgroud)

我想返回以下内容:

ADWN    1259    11:00   B23

ADWN    3009    12:00   B19

ADWN    1589    14:20   B12
Run Code Online (Sandbox Code Playgroud)

我认为创建一个具有所需值的文件,然后循环遍历文件,将每个数字单独传递给grep命令将给我我想要的东西,但我还没有找到这样的例子.有没有一个简单的解决方案,循环是处理这个问题的最佳方法,还是已经在其他地方回答了这个例子?

提前感谢您的想法和建议 -

克莱德

grep

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

unix排序为2个字段的数字顺序

我需要使用unix排序对一些数据进行排序,但我无法确切地说出正确的语法,数据看起来像

3.9.1 Step 10:
3.9.1 Step 20:
3.8.10 Step 20:
3.10.2 Step 10:
3.8.4 Step 90:
3.8.4 Step 100:
3.8.4 Step 10:
Run Code Online (Sandbox Code Playgroud)

我想首先使用主要数字,然后是步骤编号对其进行排序,例如,上面排序的数据看起来像.

3.8.4 Step 10:
3.8.4 Step 90:
3.8.4 Step 100:
3.8.10 Step 20:
3.9.1 Step 10:
3.9.1 Step 20:
3.10.2 Step 10:
Run Code Online (Sandbox Code Playgroud)

我找到了按此网站上的第一个数字排序的方法:

sort -t. -k 1,1n -k 2,2n -k 3,3n
Run Code Online (Sandbox Code Playgroud)

但我现在正在努力排序第3列步骤编号,而不会打扰第一类

unix sorting bash awk sed

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

Perl - DBI和.pgpass

我可以使用以下命令成功创建与Postgres数据库的连接:

my $settings = {
    host => 'myhost',
    db => 'mydb',
    user => 'myuser',
    passwd => 'mypasswd'
};

my $connection = DBI->connect(
    'DBI:Pg:dbname=' . $settings->{'db'} . ';host=' . $settings->{'host'},
    $settings->{'user'},
    $settings->{'passwd'},
    {
        RaiseError => 1,
        ShowErrorStatement => 0,
        AutoCommit => 0
    }
) or die DBI->errstr;
Run Code Online (Sandbox Code Playgroud)

但是我在Perl模块中留下了有价值的登录凭据(是的,我更改了它们).目前,我用psql交互式方式发出查询.为了节省必须记住我的用户名/密码,我已将凭据放在具有权限600的文件(〜/ .pgpass)中.文件如下所示:

# host:port:database:user:passwd
myhost:5432:mydb:myuser:mypasswd
Run Code Online (Sandbox Code Playgroud)

如何安全地使用此文件("$ENV{HOME}/.pgpass")和DBI模块来隐藏我的凭据?可以吗?什么是最佳做法?

unix postgresql bash perl dbi

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

大括号内的大括号(大括号) - gnu parallel/xargs/find

使用GNU parallel(http://www.gnu.org/software/parallel/)时遇到括号(大括号)问题

我有四个文件列表:

file1.txt.super
file2.txt.super
file3.txt.super
file4.txt.super
Run Code Online (Sandbox Code Playgroud)

如果我发出: ls * | parallel "mkdir ./{.}"

我得到了四个目录:

file1.txt
file2.txt
file3.txt
file4.txt
Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎样才能简单地返回四个目录:

file1
file2
file3
file4
Run Code Online (Sandbox Code Playgroud)

我已阅读http://www.linuxjournal.com/article/8919但无法使用gnu parallel实现这些正则表达式.我想我在这里遗漏了一些东西.此外,非常感谢任何具有更复杂的正则表达式的示例.

regex parallel-processing bash shell curly-braces

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

awk没有与OFMT和$ 0进行四舍五入

我正在打印一个包含100列的数组,我希望所有列都有2位小数.我想使用print $ 0而不必单独指定所有列的格式.

OFMT确实看起来与0美元一起工作:

echo '0.77767686 0.76555555 0.6667667 0.77878878' |awk '{CONVFMT="%.2g";OFMT="%.2g";print ($0+0);print ($0+0)"";print $0}' 
Run Code Online (Sandbox Code Playgroud)

结果:

0.78
0.78
0.77767686 0.76555555 0.6667667 0.77878878
Run Code Online (Sandbox Code Playgroud)

awk gawk

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

使用命令行参数覆盖 Nextflow 参数

鉴于以下情况nextflow.config

google {
  project = "cool-project"
  region = "europe-west4"
            
  lifeSciences {
    bootDiskSize = "200 GB"
    debug = true
    preemptible = true
  }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用命令行参数覆盖其中一项或多项设置。例如,如果我想指定不应该使用抢占式机器,我可以执行以下操作:

nextflow run main.nf -c nextflow.config --google.lifeSciences.preemptible false
Run Code Online (Sandbox Code Playgroud)

nextflow

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

将grep命令的结果分组

我一直在使用grep -f从一个文件中获取模式并从另一个文件中提取行.结果如下:

1   11294199    11294322    40  10  123 0.0813008
1   11294199    11294322    41  6   123 0.0487805
1   11294199    11294322    42  10  123 0.0813008
1   11294199    11294322    43  2   123 0.0162602
1   11293454    11293544    51  1   90  0.0111111
1   11293454    11293544    52  2   90  0.0222222
1   11291356    11291491    54  6   135 0.0444444
1   11291356    11291491    55  8   135 0.0592593
1   11291356    11291491    56  3   135 0.0222222
Run Code Online (Sandbox Code Playgroud)

现在我需要根据前三列对结果进行分组,并为每个组计算第4列的总和:

1   11294199    11294322  (40+41+42+43)
1   11293454    11293544  (51+52)
1   11291356    11291491  (54+55+56) …
Run Code Online (Sandbox Code Playgroud)

unix perl awk grep sed

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

按条件合并具有不同列信息的文件

我有三个文件,每个文件中的信息不会以任何方式重叠 - 但是,它们需要以特定的方式相互合并才能有用.

第一个文件在后两个文件中是唯一的,它们以相同的方式设置.文件1看起来像这样:

rs101   12  126890980   A   G   
rs102   4   114553253   A   C   
rs103   9   172776204   C   T
Run Code Online (Sandbox Code Playgroud)

文件2看起来像这样:

1   178 0.12    0.26    0.02    
1   1458    0.35    0.37    0.021   
1   318 0.99    0.105   0.08
Run Code Online (Sandbox Code Playgroud)

文件3看起来像这样:

 1  3567    0.78    0.67    0.005   
 0  0   0   0   0   
 1  3567    0.34    -0.15   0.001 
Run Code Online (Sandbox Code Playgroud)

我想要一个脚本,将这些文件合并到文件中以生成第三个文件:

rs101   12  126890980   A   G
1   178 0.12    0.26    0.02
1   3567    0.78    0.67    0.005
rs102   4   114553253   A   C   
1   1458    0.35    0.37    0.02
0   0   0 …
Run Code Online (Sandbox Code Playgroud)

python unix perl awk sed

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

grep - perl中的上下文

下面的代码完全按照我想要的方式在我的perl脚本中运行.但是,运行非常大的文件需要花费很长时间.有人会知道我的grep命令的perl替代方法吗?

my $print = `grep --after-context=3 $line $inputfile`;
print OUTFILE $print
Run Code Online (Sandbox Code Playgroud)

为了解释上面的代码:它只是$line在输入文件中找到一行(被调用$inputfile)并打印它找到的匹配和匹配后的三行(从$inputfile)到我的outfile(调用OUTFILE).

干杯!

optimization perl grep

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

nohup和sed,重定向stderr和stdout

在我的服务器上nohup sleep 1 > nohup.out &没有提供帮助信息.好.
在我的笔记本电脑上运行相同的命令,我得到:nohup: ignoring input and redirecting stderr to stdout.虽然命令仍然正常运行并完成,但我不明白为什么在我的两台机器之间报告此消息存在差异.幸运的是,我可以通过简单地将stderr和stdout重定向到文件来解决我的笔记本电脑上的这个问题:nohup sleep 1 &> nohup.out &

所以....我想要做的是在我的笔记本电脑上实现一个更有用的命令:

以下在我的服务器上工作正常,并且没有报告消息:
nohup ls -1 *.txt | sed -e "s%\(.*\)%/home/user/scripts/script.pl -find \1 %" | sh > nohup.out &

这行代码"nohups"将一个文件管道列表导入到sed中,它们script.pl连续运行并在shell中执行.script.pl将数据打印到多个文件,并将一些信息打印到stdout.我通过将其写入名为的文件来捕获此信息nohup.out

现在,当我在笔记本电脑上运行这个单行时,我明白了nohup: ignoring input and redirecting stderr to stdout.这是预期的(但由于我不知道的原因).但是当我修改行重定向stderr和stdout时:
nohup ls -1 *.txt | sed -e "s%\(.*\)%/home/user/scripts/script.pl -find \1 %" | sh &> nohup.out &

我仍然得到消息 nohup: ignoring input and redirecting …

unix bash sed pipe nohup

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