我试图做一些bash与sed被证明是非常困难的.
我有一个bash脚本,它的第一个参数是日期.
代码想要更改文本文件中的一行以包含传递的日期.这是代码
#!/bin/bash
cq_fname="%let outputfile="/user/cq_"$1".csv";"
sed "29s/.*/\"$ct_fname\"/" file1.sas > file2.sas
Run Code Online (Sandbox Code Playgroud)
这个脚本在第三行失败,我得到一些关于乱码的命令.有没有人知道一个聪明的方法让它工作?如何在引号中加入正斜杠sed?
我想转换一个int日期,如:
20111201
到string:
01DEC2011
是否有内置于 C++ 中的快速日期格式转换(或者我可以执行的 bash 系统命令)来执行此操作,或者我是否一直在进行切换?
使用带类的向量时,我遇到意外的性能下降.
我有一个csv_File类,它读入csv文件并将内容存储在2D矢量中.有一个允许访问的成员函数,例如
csv_File file("file.csv");
file.access(2,2);
Run Code Online (Sandbox Code Playgroud)
访问2,2元素.
然后,我有另一个类csv_Array在向量中存储多个csv_File对象,例如私有成员向量有一个允许访问的成员函数,即它返回一个csv_File对象,例如:
csv_Array file_array(5); //store 5 csv_File objects
file_array.grab(0).access(2,2);
Run Code Online (Sandbox Code Playgroud)
在第二行中,grab返回一个csv_File对象(在本例中是第一个),access是csv_File对象的成员函数.
但是,我注意到调用csv_Array.grab(0).access(2,2); 比它应该慢得多(它应该只是3个vector :: at calls).
是否有某种隐藏的副本正在使这个非常慢?
编辑:以下是一些相关的函数原型:
//Access in csv_File
std::string access(int row, int column);
//grab in csv_Array and csv_Analysis (mentioned below)
csv_File grab(int index);
Run Code Online (Sandbox Code Playgroud)
附加详细信息(如有必要):此代码的应用是将一堆csv文件加载到内存中,然后将其传递给将对数据进行一些计算的朋友类.原理上,我有以下内容:
1)csv_Array具有私有成员向量存储; 2)csv_Analysis是一个csv_Array的朋友的类3)csv_Analysis访问矢量存储,它位于csv_Array中4)这种访问是通过将csv_Analysis传递给csv_Array中的存储(因此没有希望复制....)来完成的,例如public:csv_Analysis(csv_Array&csv_block);
因此,上面给出的调用[file_array.grab(0).access(2,2); ]实际上还有一个额外的"级别",更像是
csv_Analysis analysis_Object(file_array);
analysis_Object.grab(0).access(2,2);
Run Code Online (Sandbox Code Playgroud)
其中grab以相同的方式起作用,并且也被定义为csv_Analysis类的成员函数.
我想在 bash 中设置一个名为 test_var 的变量基本上,我希望 echo test_var 输出:
%let output="file_20120601.csv";
Run Code Online (Sandbox Code Playgroud)
其中 20120601 是一个变量。我正在尝试使用以下方法来做到这一点:
test_var='%let output="file_$1.csv";'
echo test_var
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为 $1 不被解释为变量,而是被解释为字面的 $1
有谁知道我如何修改它以使其执行我想要的操作?
我正在尝试实现自定义二进制搜索以运行日期向量.
我的二进制搜索功能如下:
template <typename RandomAccessIterator, typename Value, typename Comparer>
inline int binary_search(RandomAccessIterator const first, RandomAccessIterator const last, Value const& value, Comparer comparer)
{
RandomAccessIterator it(std::lower_bound(first, last, value, comparer));
if (it == last || comparer(*it, value) || comparer(value, *it))
return distance(first,last);
return distance(first,it);
}
Run Code Online (Sandbox Code Playgroud)
我使用的比较器定义为:
template <class T>
inline bool cmp(T lhs,T rhs)
{
return lhs<rhs;
}
Run Code Online (Sandbox Code Playgroud)
这两个编译没有问题,但是,当我尝试使用以下代码调用binary_search函数时,我收到编译错误:
binary_search(date_list.begin(),date_list.end(),date2,cmp)
Run Code Online (Sandbox Code Playgroud)
其中date_list是包含日期的向量,date2是一个int.
确切的错误消息是:
error: no matching function for call to ?binary_search(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int&, <unresolved overloaded …Run Code Online (Sandbox Code Playgroud) 我正在学习如何使用clock_getres(在网络上的任何地方几乎没有好的文档).我的代码看起来像这样:
timespec now;
clock_getres(CLOCK_REALTIME,&now);
std::cout<<statut_cast<int>(now.tv_sec)<<","<<static_cast<int>(now.tv_nsec)<<std::endl;
Run Code Online (Sandbox Code Playgroud)
无论我何时运行此代码,输出始终为0,1是否可以解释为什么这不起作用?
我有一个应用程序生成相当多的数据,我希望它可供另一个C++应用程序访问.平台是RHEL5,g ++如果重要的话.
以前,我这样做的方法是将数据写入/ dev/shm(基本上是一个linux内存驱动器),然后让另一个应用程序从那里读取它.
然而,这似乎是非常低效的,因为有一个流,然后是一个ifstream,并将数据重新加载到内存中.此外,将数据作为文本文件存储在内存中似乎需要更多的空间而不仅仅是将其保存为内存(尽管我不是100%确定这是真的).
我要分享的数据是以.的形式
vector< vector<struct> > mydata;
Run Code Online (Sandbox Code Playgroud)
我希望其他应用程序能够做类似的事情
mydata.at(ii).back()
Run Code Online (Sandbox Code Playgroud)
检索它需要的数据.实际上mydata中会有相当多的数据.如果我要将它打印成CSV格式文件,它可能是10GB.我正在处理的服务器有24GB的内存,应该足以处理这个问题.
此外,当第一个应用程序在mydata中添加更多条目时,会发生这种检索(因此可能存在潜在的竞争条件?).
在C++中有没有办法共享vector <vector> mydata; 两个申请之间?如果是这样,最好的实现是什么?如果可能的话,我宁愿避免使用第三方库.