我的命令输出类似于:
1540 "A B"
6 "C"
119 "D"
Run Code Online (Sandbox Code Playgroud)
第一列始终是数字,后跟空格,然后是双引号字符串.
我的目的是仅获得第二列,例如:
"A B"
"C"
"D"
Run Code Online (Sandbox Code Playgroud)
我打算用它<some_command> | awk '{print $2}'来完成这个.但问题是,第二列中的某些值包含空格,这恰好是分隔awk字段的默认分隔符.因此,输出搞砸了:
"A
"C"
"D"
Run Code Online (Sandbox Code Playgroud)
如何干净地获得第二列的值(带配对的引号)?
我试图在ssl/tls连接上使用ldapsearch,但它不起作用:
ldapsearch -ZZ -d 5 -b "cn=Users,dc=my,dc=server,dc=com" -s sub -D
"cn=mydevice,cn=Users,dc=my,dc=server,dc=com" -h my.server.com -p 3269
-w "mypass" -x "(cn=test)"
ldap_create
ldap_url_parse_ext(ldap://my.server.com:3269)
ldap_extended_operation_s
ldap_extended_operation
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP my.server.com:3269
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.199.46.70:3269
ldap_connect_timeout: fd: 3 tm: -1 async: 0
ldap_open_defconn: successful
ldap_send_server_request
ber_scanf fmt ({it) ber:
ber_scanf fmt ({) ber:
ber_flush: 31 bytes to sd 3
ldap_result ld 0x95ff590 msgid 1
wait4msg ld 0x95ff590 msgid 1 (infinite timeout)
wait4msg continue ld 0x95ff590 msgid …Run Code Online (Sandbox Code Playgroud) 斯科特在Effective C++上说,第3版,pg.43要创建一个抽象类,我们只需要给它一个纯虚拟析构函数:
class AWOV { // AWOV = "Abstract w/o Virtuals"
public:
virtual ~AWOV() = 0; // declare pure virtual destructor
};
Run Code Online (Sandbox Code Playgroud)
然后,他接着说有一个转折:我们必须为纯虚析构函数提供一个定义:
AWOV::~AWOW() {} // definition of pure virtual dtor
Run Code Online (Sandbox Code Playgroud)
我的问题是,通过指定= 0纯虚函数,我们说该函数不能对声明这个纯虚函数的类有任何定义.
为什么在这里为纯虚拟析构函数提供定义(即使它是空的)是可以的?
我们现在转向两个最终结构,利用我们的集合代表整数的事实.位向量是第1列的老朋友.以下是它们的私有数据和函数:
enum { BITSPERWORD = 32, SHIFT = 5, MASK = 0x1F };
int n, hi, *x;
void set(int i) { x[i>>SHIFT] |= (1<<(i & MASK)); }
void clr(int i) { x[i>>SHIFT] &= ~(1<<(i & MASK)); }
int test(int i) { return x[i>>SHIFT] &= (1<<(i & MASK)); }
Run Code Online (Sandbox Code Playgroud)
正如我所收集的那样,如第1列所述,用于表示整数集的位向量的中心思想是当且仅当整数i在集合中时才打开第i位.
但我真的对上述三个功能所涉及的算法感到茫然.这本书没有给出解释.
我只能得到i & MASKi的低5位,而i>>SHIFT向右移动i 5位.
有人会详细说明这些算法吗?位操作对我来说似乎总是神话,:(
在"Effective C++"(第3版,第118页)的第27项中,Scott Meyers说:
class Base { ... };
class Derived: public Base { ... };
Derived d;
Base *pb = &d;
Run Code Online (Sandbox Code Playgroud)
这里我们只是创建一个指向派生类对象的基类指针,但有时候,两个指针不会相同.在这种情况下,在运行时将偏移量应用于
Derived*指针以获取正确的Base*指针值.最后一个示例演示了单个对象(例如,类型的对象
Derived)可能具有多个地址(例如,当Base*指针指向时其地址及指针指向时的地址Derived*).
这有点难以理解.我知道指向基类的指针可以在运行时指向派生类的对象,这称为多态或动态绑定.但派生类对象在内存中确实有多个地址吗?
我猜这里有一些误解.有人可以澄清一下吗?也许这与如何在C++编译器中实现多态性有关?
在阅读Jon Bentley的"Programming Pearls"第2版的第14章中,我理解堆使用基于单的数组,C中最简单的方法是声明x [n + 1]和废弃元素x [0](页面148).
在页157,Jon列出了完整的heapsort伪代码:
for i = [2, n]
siftup(i)
for (i = n; i >= 2; i--)
swap(1, i)
siftdown(i - 1)
Run Code Online (Sandbox Code Playgroud)
这是C中的实现.但是,数组索引从0开始,而不是1.
void heapSort(int numbers[], int array_size)
{
int i, temp;
// Qiang: shouldn't the stop-condition be i >= 1?
for (i = (array_size / 2)-1; i >= 0; i--)
siftDown(numbers, i, array_size);
for (i = array_size-1; i >= 1; i--)
{
// Qiang: shouldn't the swap be done with numbmers[1], instead of …Run Code Online (Sandbox Code Playgroud) 我可以sed用来检查某个命令输出的第一行(到stdout)并删除第一行,如果它匹配某个模式吗?
比方说,命令的输出是这样的:
"AB"
"CD"
"E"
"F"
Run Code Online (Sandbox Code Playgroud)
我希望它成为:
"CD"
"E"
"F"
Run Code Online (Sandbox Code Playgroud)
但是当第一行是"GH",我不想删除该行.
我试过这个,但它不起作用:
<some_command> |sed '1/<pattern>/d'
Run Code Online (Sandbox Code Playgroud)
贝壳告诉我:
sed: 0602-403 1/<pattern>/d is not a recognized function.
Run Code Online (Sandbox Code Playgroud)
我只想使用sed处理第一行,而其他行保持不变.
这里的语法是什么?
给定一个由单个空格分隔的单词组成的字符串,按单词在字符串中出现的次数降序打印单词。
\n\n例如,输入字符串 \xe2\x80\x9ca bb\xe2\x80\x9d 将生成以下输出:
\n\nb : 2\na : 1\nRun Code Online (Sandbox Code Playgroud)\n\n首先,我想说输入字符串是由单字母单词还是由多字母单词组成还不太清楚。如果是前者,事情可能会很简单。
\n\n这是我的想法:
\n\nint c[26] = {0};\nchar *pIn = strIn;\n\nwhile (*pIn != 0 && *pIn != ' ')\n{\n ++c[*pIn];\n ++pIn;\n}\n\n/* how to sort the array c[26] and remember the original index? */\nRun Code Online (Sandbox Code Playgroud)\n\n我可以获得输入字符串中每个单字母单词的频率统计信息,并且可以对其进行排序(使用 QuickSort 或其他方式)。但是在计数数组排序后,如何获取与计数相关的单字母单词,以便稍后将它们成对打印出来?
\n\n如果输入字符串由多字母单词组成,我计划使用 amap<const char *, int>来跟踪频率。但同样,如何对映射的键值对进行排序?
问题是用 C 或 C++ 编写的,欢迎提出任何建议。
\n\n谢谢!
\n刚刚快速检查了sys.pathDebian python 3.7Buster:
qxu@debian:~$ python3
Python 3.7.3 (default, Apr 3 2019, 05:39:12)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print('\n'.join(sys.path))
/usr/lib/python37.zip
/usr/lib/python3.7
/usr/lib/python3.7/lib-dynload
/usr/local/lib/python3.7/dist-packages
/usr/lib/python3/dist-packages
>>>
Run Code Online (Sandbox Code Playgroud)
除第一个条目外,每个条目看起来都不错:
qxu@debian:~$ ll /usr/lib/python37.zip
ls: cannot access '/usr/lib/python37.zip': No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不确定为什么 zip 文件本身可能是sys.path. 不应该sys.path只包含目录吗?
即使 zip 文件有理由成为 的一部分sys.path,为什么不能在物理上找到它呢?
我知道在 pytest 中,设置和清理的首选方法是使用yield,例如
class TestSomething():
@pytest.fixture(scope="class", autouse=True)
def setup_cleanup(self, request):
...
yield
...
def test_something(self):
...
Run Code Online (Sandbox Code Playgroud)
问题是,如果设置部分出现故障,在yield发生之前,清理代码将没有机会运行。
是否有可能,当设置中发生某些严重故障时,所有测试用例都被跳过,并且控制权由清理接管(yield在方法之后setup_cleanup)?