我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) 我试图返回第一次出现多个字符串,即我想从下面的文本中选择第一次出现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命令将给我我想要的东西,但我还没有找到这样的例子.有没有一个简单的解决方案,循环是处理这个问题的最佳方法,还是已经在其他地方回答了这个例子?
提前感谢您的想法和建议 -
克莱德
我需要使用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列步骤编号,而不会打扰第一类
我可以使用以下命令成功创建与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模块来隐藏我的凭据?可以吗?什么是最佳做法?
使用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实现这些正则表达式.我想我在这里遗漏了一些东西.此外,非常感谢任何具有更复杂的正则表达式的示例.
我正在打印一个包含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) 鉴于以下情况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)
?
我一直在使用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) 我有三个文件,每个文件中的信息不会以任何方式重叠 - 但是,它们需要以特定的方式相互合并才能有用.
第一个文件在后两个文件中是唯一的,它们以相同的方式设置.文件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) 下面的代码完全按照我想要的方式在我的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).
干杯!
在我的服务器上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 …