我有成千上万个制表符分隔的数据文件,每个文件都像:
a0\ta1\ta2\ta3\ta4\ta5\ta6\ta7\ta8\ta9\n
b0\tb1\tb2\tb3\tb4\tb5\tb6\tb7\tb8\tb9\n
...
Run Code Online (Sandbox Code Playgroud)
但是,偶尔会有包含(随机)格式错误的行的文件,例如:
a0\ta1\ta2\ta3_0\n
a3_1\ta4\ta5\ta6\ta7\ta8\ta9\n
b0\tb1\tb2_0\n
b2_1\tb3\tb4\tb5\tb6\tb7\tb8\tb9\n
...
Run Code Online (Sandbox Code Playgroud)
其中a3_0,a3_1(b2_0,b2_1相应)是最初由空格分隔的a3(b2分别)部分.我想\n在一行的末尾用白色空格替换每个行,只有当行太短或太少时\t.目前5似乎是一个安全的门槛.
我经常sed用来做一些修改,比上面简单得多.我想知道是否sed或其他一些命令(比如awk?我还需要学习)可用于快速处理(因为我有很多文件).谢谢.
我有一个可变mask类型的std::bitset<8>如
std::string bit_string = "00101100";
std::bitset<8> mask(bit_string);
Run Code Online (Sandbox Code Playgroud)
有没有一种有效的方法可以快速屏蔽掉另一个给定的相应(三个)位std::bitset<8> input并将所有这些屏蔽的位移到最右边?例如,如果input是10100101,那么我想快速得到十进制00000101等于5.然后,我可以vect[5]为了快速索引第六元素的vect是std::vector<int>尺寸为8.
或者更确切地说,我可以快速获取被屏蔽的位的十进制值(保留其相对位置)吗?或者我不能?
我想在我的情况下,我可以采取的优势是bitset<8> mask.而且我应该以某种方式操纵它来快速完成工作.
我觉得这样(由Spektre补充):
mask 00101100b
input 10100101b
---------------
& ??1?01??b
>> 101b
5
Run Code Online (Sandbox Code Playgroud)