一些背景信息:我希望在Red Hat服务器上运行脚本以从/ dev/random读取一些数据,并使用Perl unpack()命令将其转换为十六进制字符串以供以后使用(基准数据库操作).我在/ dev/random上运行了一些"head -1",它似乎工作正常,但在调用它几次后,它就会有点挂起.几分钟后,它最终会输出一小段文字,然后完成.
我切换到/ dev/urandom(我真的不想,它更慢,我不需要那种随机性)并且它在前两次或三次调用时工作正常,然后它也开始挂起.我想知道它是否是轰炸它的"头部"命令,所以我尝试使用Perl做一些简单的I/O,它也悬挂着.作为最后的努力,我使用"dd"命令将一些信息直接转储到文件而不是终端.我所要求的只是1mb的数据,但在我杀死它之前花了3分钟才得到~400字节.
我检查了进程列表,CPU和内存基本没有动过.究竟是什么原因可能会导致/ dev/random这样废弃,以及我可以做些什么来防止/修复它?
编辑:谢谢你的帮助!似乎我随机和随机混淆了.我现在已经启动并运行了该脚本.看起来我今天学到了新东西.:)
在匹配涉及美元符号的子模式时,我遇到了一些问题.例如,考虑以下文本块:
Regular Price: $20.50 Final Price: $15.20
Regular Price: $18.99 Final Price: $2.25
Regular Price: $11.22 Final Price: $33.44
Regular Price: $55.66 Final Price: $77.88
Run Code Online (Sandbox Code Playgroud)
我试图将常规/最终价格集与以下正则表达式匹配,但它根本不起作用(根本没有匹配):
preg_match_all("/Regular Price: \$(\d+\.\d{2}).*Final Price: \$(\d+\.\d{2})/U", $data, $matches);
我逃过了美元符号,所以给出了什么?
假设我有一个表格,census其中包含以下信息:
COUNTRY PROVINCE CITY POPULATION
==============================================
USA California Sacramento 1234
USA California SanFran 4321
USA Texas Houston 1111
USA Texas Dallas 2222
Canada Ontario Ottawa 3333
Canada Manitoba Winnipeg 4444
Run Code Online (Sandbox Code Playgroud)
我正在国家/省级建立一份报告,它给了我以下内容:
SELECT country, province, SUM(population)
FROM census
GROUP BY country, province;
COUNTRY PROVINCE SUM(POPULATION)
=======================================
USA California 5555
USA Texas 3333
Canada Ontario 3333
Canada Manitoba 4444
Run Code Online (Sandbox Code Playgroud)
我希望报告中包含"总体摘要"行,以便最终结果如下所示:
COUNTRY PROVINCE SUM(POPULATION)
=======================================
USA California 5555
USA Texas 3333
Canada Ontario 3333
Canada Manitoba 4444
TOTAL 16665
Run Code Online (Sandbox Code Playgroud)
我很熟悉ROLLUP …
是否可以在头文件中初始化静态特征矩阵4d?我想将它用作全局变量.
我想做一些事情:
static Eigen::Matrix4d foo = Eigen::Matrix4d(1, 2 ... 16);
Run Code Online (Sandbox Code Playgroud)
或类似于矢量:
static Eigen::Matrix4d foo = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
Run Code Online (Sandbox Code Playgroud)
这是特征矩阵文档的链接.我似乎无法从那里找到如何做到这一点.
背景:
我正在尝试创建一个在设定的时间间隔内运行命令的函数,因为我无法访问"监视"程序.简化为最基本的,我正在尝试编写的函数runit() { $1; }.
什么有效:
当我传递非别名的东西时,这工作正常和花花公子.例如,runit "ls -l"工作正常.我从ls -l命令中获得了完整的输出.
什么行不通:
当我传给别名时,问题就开始了.例如,设置alias ll="ls -l"然后调用runit "ll"将导致-bash: ll: command not found.
我尝试过的事情:
当我对别名进行硬编码时runit() { ll; },它工作得很好并且给了我期望的东西.
我觉得我可能会忽视某些东西,但我无法将手指放在它上面.
为什么硬编码别名工作正常,但将其传递给函数会失败?
有没有办法完成我想要做的事情?
我正在尝试将split字符串放入其组件字符中.
为此,我总是split(//, $str)按照文档的建议使用:
但是,这:
print join(':', split(//, 'abc')), "\n";
使用空字符串匹配作为分隔符来生成输出a:b:c; 因此,空字符串可用于将EXPR分割成其组成字符的列表.
在我的脚本中,我需要一个前N个字符或第一个length($str) - 1字符的数组,以较少者为准.为此,我使用split(//, $str, $n + 1)并丢弃最后一个元素.
理论上这应该有效.如果LIMIT小于字符串长度,则将所有额外字符分组到最后丢弃的元素中.如果LIMIT大于字符串长度,则最后一个元素是丢弃的最后一个字符.
这是我遇到一些问题的地方.
文件说:
......以及每一个:
print join(':', split(//, 'abc', 3)), "\n";
print join(':', split(//, 'abc', 4)), "\n";
产生输出a:b:c.
但这不是我得到的结果.如果LIMIT大于字符的数目越大,所得到的数组总是以结束恰好一个空白元件(演示):
print join(':', split(//, 'abc', 1)), "\n"; # abc
print join(':', split(//, 'abc', 2)), "\n"; # a:bc
print join(':', split(//, 'abc', 3)), "\n"; # a:b:c …Run Code Online (Sandbox Code Playgroud) 好的,所以在拓扑排序中,取决于输入数据,通常有多个正确的解决方案,可以对图形进行"处理",以便所有依赖关系都在"依赖"它们的节点之前.但是,我正在寻找一个稍微不同的答案:
假设以下数据:
a -> b和c -> d(a必须在之前b,c必须在之前d).
只有这两个限制,我们有多种候选方案:( ,,a b c d 等).但是,我正在寻找创建一种"分组"这些节点的方法,以便在处理组之后,下一组中的所有条目都会依赖它们的依赖关系.对于上面假设的数据,我会寻找像这样的分组.在每个组内,只要组1 在处理组2 中的任何一个之前完成,那么处理节点的顺序(在之前或之前等,反之亦然)并不重要.a c d bc a b d(a, c) (b, d)acbd(a, c)(b, d)
唯一额外的问题是每个节点应该尽可能在最早的组中.考虑以下:
a -> b -> c
d -> e -> f
x -> y
分组方案在(a, d) (b, e, x) (c, f, y)技术上是正确的,因为x在之前y,更优化的解决方案是(a, d, x) (b, e, …
我似乎遇到了一个特定于ksh88的问题,它将单引号改为双引号,但仅在涉及heredocs和命令替换的某些情况下.
这是一个例子:
#!/bin/ksh
# This example works correctly
echo "Example 1:"
cat <<EOF
The 'quick' brown fox "jumped" over the lazy dog.
EOF
echo
# This example is broken
echo "Example 2:"
var=$(cat <<EOF
The 'quick' brown fox "jumped" over the lazy dog.
EOF)
echo "${var}"
echo
# This example works correctly
echo "Example 3:"
var=`cat <<EOF
The 'quick' brown fox "jumped" over the lazy dog.
EOF`
echo "${var}"
echo
Run Code Online (Sandbox Code Playgroud)
这是输出(请注意示例2的不同之处):
Example 1:
The 'quick' brown fox "jumped" over the …Run Code Online (Sandbox Code Playgroud) 我遇到了语法错误.我接受这是一个语法错误,但我有点好奇为什么它是一个语法错误.
这完全符合您的预期:
(0..9).each { |n| puts n.to_s + "^2 = " + (n**2).to_s }
Run Code Online (Sandbox Code Playgroud)
这会引发错误:
(0..9).each { |n| puts n.to_s +"^2 = "+ (n**2).to_s }
Run Code Online (Sandbox Code Playgroud)
错误:
NoMethodError: undefined method '+@' for "^2 = ":String
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我可以在任何地方移动第二个加号,Ruby似乎没有任何问题,但如果第一个碰巧触及双引号,我会收到语法错误.
为什么会发生这种情况?
所以我正在玩一些代码,并希望看到将std :: string转换为大写的哪种方法效率最高.我认为两者在性能方面会有些相似,但我非常错误.现在我想找出原因.
转换字符串的第一种方法如下:对于字符串中的每个字符(保存长度,从0到长度迭代),如果它在'a'和'z'之间,则将其移位以使其在'A'之间和'Z'代替.
第二种方法的工作原理如下:对于字符串中的每个字符(从0开始,一直持续到我们点击空终止符),在toupper()函数中应用构建.
这是代码:
#include <iostream>
#include <string>
inline std::string ToUpper_Reg(std::string str)
{
for (int pos = 0, sz = str.length(); pos < sz; ++pos)
{
if (str[pos] >= 'a' && str[pos] <= 'z') { str[pos] += ('A' - 'a'); }
}
return str;
}
inline std::string ToUpper_Alt(std::string str)
{
for (int pos = 0; str[pos] != '\0'; ++pos) { str[pos] = toupper(str[pos]); }
return str;
}
int main()
{
std::string test = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*()_+=-`'{}[]\\|\";:<>,./?";
for (size_t i …Run Code Online (Sandbox Code Playgroud)