我有一个大文件(数百万行),包含几小时网络捕获的IP地址和端口,每行一个ip /端口.行具有以下格式:
ip.ad.dre.ss[:port]
Run Code Online (Sandbox Code Playgroud)
记录时收到的每个数据包都有一个条目,因此有很多重复的地址.我希望能够通过某种类型的shell脚本来运行它,这将能够将其减少到格式的行
ip.ad.dre.ss[:port] count
Run Code Online (Sandbox Code Playgroud)
where count
特定地址(和端口)的出现次数.不需要做任何特殊工作,将不同的端口视为不同的地址.
到目前为止,我正在使用此命令从日志文件中删除所有IP地址:
grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt
Run Code Online (Sandbox Code Playgroud)
从那里,我可以使用一个相当简单的正则表达式来清除我的地址发送的所有IP地址(我不关心)
然后我可以使用以下内容来提取唯一条目:
sort -u ips.txt > intermediate.txt
Run Code Online (Sandbox Code Playgroud)
我不知道如何通过排序以某种方式聚合行计数.
请考虑以下代码段:
pid_t cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) { // in child
execvp(argv[1], argv + 1);
perror("execvp");
_exit(EXIT_FAILURE);
}
// in parent
Run Code Online (Sandbox Code Playgroud)
如果execvp返回,我该如何退出子进程?我应该使用exit()或_exit()吗?
有没有办法强制*nix命令"date"以独立于本地的特定格式输出?例如,如果我今天打电话给"date -u",我会在美国机器上得到:
Mon Oct 15 13:15:29 UTC 2012
Run Code Online (Sandbox Code Playgroud)
但在德国的机器上我得到:
Mo 15. Okt 13:15:31 UTC 2012
Run Code Online (Sandbox Code Playgroud) 我经常看到代码添加一个值,例如指针的长度,然后使用这个值,例如
T* end = buffer + bufferLen;//T* + size_t
if (p < end)
Run Code Online (Sandbox Code Playgroud)
但是,缓冲区是否有可能在"buffer + bufferLen"可能溢出的内存末尾附近分配(例如0xFFFFFFF0 + 0x10),导致"p <end"为假,即使p是有效的元素地址(例如0xFFFFFFF8).
如果有可能的话,当我看到许多与开始/结束范围一起工作的东西时,如何避免在最后一个元素之后结束下一个元素
我正在将一些C#代码移植到VB6,因为遗留应用程序.我需要存储一对配对列表.我不需要进行关联查找,我只需要能够存储成对的项目.
我正在移植的片段如下所示:
List<KeyValuePair<string, string>> listOfPairs;
Run Code Online (Sandbox Code Playgroud)
如果我将它移植到C++,我会使用这样的东西:
std::list<std::pair<string, string> > someList;
Run Code Online (Sandbox Code Playgroud)
如果这是python,我只使用元组列表.
someList.append( ("herp", "derp") )
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种图书馆类型,但如果有必要,我会满足于其他的东西.我试图成为LAZY而不必编写cYetAnotherTinyUtilityClass.cls来获得此功能,或者回到经常被滥用的字符串操作.
我试过谷歌搜索,但VB6并没有真正在线记录,很多有什么,很好的挑战.如果你见过BigResource,你会明白我的意思.
我环顾四周,找到了其他有问题的答案,但没有一个问题涉及这个问题的范围.包括这个问题,还有这个问题.
我必须以有效的方式计算大范围数字的LCM.我对其他问题看起来并不太深入,因为它们没有处理与此算法必须处理的数字范围一样大的数字范围.
我现在得到的代码可以在大约90秒内计算1到350000之间的每个数字的最小值.(结果数字是大约76000十进制数字).我希望最终能够在数百万甚至数十亿元素的范围内扩展它.
它最终可能会被瘫痪.对于某些算法,这根本不会很难,对于其他算法,它会更棘手(例如,如果算法使用当前生成的LCM来计算其计算的其他部分的素数)
这里是:
public static BigInteger getLCMOfRange(BigInteger lower, BigInteger upper)
{
BigInteger M = BigInteger.ONE;
BigInteger t;
// long l = System.currentTimeMillis();
// System.out.println("Calculating LCM of numbers up to " + upper + "...");
for (; lower.compareTo(upper) != 1; lower = lower.add(BigInteger.ONE))
{
t = M.gcd(lower);
if (t.compareTo(lower) == 0)
continue;
M = M.multiply(lower).divide(t);
}
// System.out.println("Done. Took " + (System.currentTimeMillis() - l) + " milliseconds. LCM is " + M.bitCount()+ " bits …
Run Code Online (Sandbox Code Playgroud) struct A {
A(int) : i(new int(783)) {
std::cout << "a ctor" << std::endl;
}
A(const A& other) : i(new int(*(other.i))) {
std::cout << "a copy ctor" << std::endl;
}
~A() {
std::cout << "a dtor" << std::endl;
delete i;
}
void get() {
std::cout << *i << std::endl;
}
private:
int* i;
};
const A& foo() {
return A(32);
}
const A& foo_2() {
return 6;
}
int main()
{
A a = foo();
a.get();
}
Run Code Online (Sandbox Code Playgroud)
我知道,返回对本地值的引用是不好的.但是,另一方面,const引用应该延长临时对象的生命周期.
此代码生成UB输出.所以没有生命延伸.
为什么?我的意思是有人可以解释一下子发生什么事吗? …
首先,这是创建马赛克图像生成器的家庭作业的一部分.我希望程序在找到图像并将其放在另一个图像(源图像)上时实时重新绘制.
这是在我的main函数中创建面板的代码.
最后一块mypanel.create()是镶嵌逻辑.
myPanel = new mosiacPanel(sourceFile, sizePercent, pixesize,threads, imageList);
//test.setText(Integer.toString(myPanel.getWidth()));
JFrame frame2 = new JFrame("COS 226 MOSIAC OF AWESOMENESS BY SLUIPMOORD && ELEANORASAURUSS");
myPanel.setVisible( true );
myPanel.repaint();
frame2.add(myPanel);
if(myPanel.getWidth() > menubar.getWidth()){
frame2.setSize(myPanel.getWidth() , myPanel.getHeight() + menubar.getHeight() );
frame2.repaint();
} else {
frame2.setSize(menubar.getWidth() , myPanel.getHeight() + menubar.getHeight() );
}
frame2.setVisible( true );
// myPanel.setLocation(170, 4);
myPanel.create();
Run Code Online (Sandbox Code Playgroud)
Mosaic面板类代码片段
public void create()
{
ph.createMosiac(imgUrls, this);
}
@Override
protected void paintComponent( Graphics g )
{ super.paintComponent(g);
g.drawImage( imgToPaint, 0, 0, null );
// …
Run Code Online (Sandbox Code Playgroud) 这是一个关于调试的问题.我已经为标准库安装了GDB漂亮的打印机,但我发现它们在许多情况下都无法正常工作.例如,使用以下声明调试一段代码:
std::map<int, int> foo;
Run Code Online (Sandbox Code Playgroud)
我编译了-O0 -ggdb3
,所以我希望没有问题foo
,如果我手动检查结构,我没有遇到任何问题.但是,STL漂亮的打印机不起作用,因为GCC似乎忽略了我的程序没有显式实例化的嵌套类型的类型信息.
例如,如果我在GDB中运行以下命令:
p foo.begin()
Run Code Online (Sandbox Code Playgroud)
我看到以下错误消息:
Python Exception <class 'gdb.error'> No type named
std::_Rb_tree_iterator<std::pair<int const, int> >::_Link_type.
Run Code Online (Sandbox Code Playgroud)
这个缺少的typename是一个内部typedef,在里面定义std::map::iterator
.它是依赖于实现的标准库支持代码,因此它不是跨平台的(甚至保证在同一平台上的不同版本的实现之间继续存在).
但是,如果我在程序中声明涉及该类型的内容,那么漂亮的打印机将正常工作.
std::_Rb_tree_iterator<std::pair<int const, int> >
::_Link_type *dummy = NULL;
Run Code Online (Sandbox Code Playgroud)
那么,我如何指示GCC不要在这种情况下删除类型的定义,以便调试器可以使用它们?鉴于STL实现不是跨平台的,一个hacky解决方法就像使用预处理器宏声明一堆虚拟变量似乎不是一个可扩展的解决方案.是否有一个标志我可以传递给GCC强制递归包含模板类型?或者GCC根本不支持这个?还有其他人遇到过这个问题并解决了吗?
作者注
GDB 7.7.1(截至本文撰写时ubuntu 14.04 repos中的最新版本)打破了GDB漂亮打印,无法正确打印指针.那些想要回答这个问题的人可能会发现知道这是一个已知问题并且已经提交了一个错误.
我正在尝试编写一个状态机来覆盖源文件并将其拆分为编译器业务或预处理器业务的部分.不是深度遍历,我只是在寻找注释或预处理器指令的部分.(没有宏,没有条件编译的块等)
注释很简单,但我不能100%确定指定预处理器指令的合法性.例如,以下行是否合法?
int i; #include <derp.h>
Run Code Online (Sandbox Code Playgroud)
是否存在允许某些指令而其他指令不允许的特殊情况?
我搜索了谷歌和搜索引擎优化,但没有找到答案的问题.
请回答BOTH C和C++,我是故意和有意识地标记的.