小编Qia*_* Xu的帖子

如何从命令输出中获取第二列?

我的命令输出类似于:

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)

如何干净地获得第二列的值(带配对的引号)?

shell awk ksh

131
推荐指数
6
解决办法
29万
查看次数

ldapsearch over ssl/tls不起作用

我试图在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)

ldap starttls

32
推荐指数
1
解决办法
9万
查看次数

为什么给纯虚函数定义是有意义的?

斯科特在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纯虚函数,我们说该函数不能对声明这个纯虚函数的类有任何定义.

为什么在这里为纯虚拟析构函数提供定义(即使它是空的)是可以的?

c++ polymorphism virtual-functions class

20
推荐指数
3
解决办法
663
查看次数

编程珍珠,第2版中的位向量实现

在编程珍珠,第2版的第140页,Jon提出了使用位向量的集合的实现.

我们现在转向两个最终结构,利用我们的集合代表整数的事实.位向量是第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位.

有人会详细说明这些算法吗?位操作对我来说似乎总是神话,:(

algorithm

13
推荐指数
2
解决办法
7294
查看次数

派生类对象的多个地址?

在"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++编译器中实现多态性有关?

c++ polymorphism

13
推荐指数
2
解决办法
915
查看次数

heapsort中的数组索引

在阅读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)

c heapsort

8
推荐指数
1
解决办法
4357
查看次数

如何在匹配时仅使用sed有条件地删除第一行?

我可以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处理第一行,而其他行保持不变.

这里的语法是什么?

sed

6
推荐指数
2
解决办法
4960
查看次数

词频统计

在面试前,我面临这样一个问题:

\n\n

给定一个由单个空格分隔的单词组成的字符串,按单词在字符串中出现的次数降序打印单词。

\n\n

例如,输入字符串 \xe2\x80\x9ca bb\xe2\x80\x9d 将生成以下输出:

\n\n
b : 2\na : 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

首先,我想说输入字符串是由单字母单词还是由多字母单词组成还不太清楚。如果是前者,事情可能会很简单。

\n\n

这是我的想法:

\n\n
int 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? */\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以获得输入字符串中每个单字母单词的频率统计信息,并且可以对其进行排序(使用 QuickSort 或其他方式)。但是在计数数组排序后,如何获取与计数相关的单字母单词,以便稍后将它们成对打印出来?

\n\n

如果输入字符串由多字母单词组成,我计划使用 amap<const char *, int>来跟踪频率。但同样,如何对映射的键值对进行排序?

\n\n

问题是用 C 或 C++ 编写的,欢迎提出任何建议。

\n\n

谢谢!

\n

c c++ word-frequency

5
推荐指数
1
解决办法
1568
查看次数

sys.path 中的 /usr/lib/python37.zip

刚刚快速检查了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,为什么不能在物理上找到它呢?

sys.path python-3.x debian-buster

5
推荐指数
0
解决办法
773
查看次数

pytest:如果设置出现问题,如何跳过测试用例并直接跳转到清理?

我知道在 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)?

python pytest

5
推荐指数
1
解决办法
131
查看次数