小编Kje*_* S.的帖子

使用awk打印除第一个字段以外的所有内容

我有一个看起来像这样的文件:

AE  United Arab Emirates
AG  Antigua & Barbuda
AN  Netherlands Antilles
AS  American Samoa
BA  Bosnia and Herzegovina
BF  Burkina Faso
BN  Brunei Darussalam
Run Code Online (Sandbox Code Playgroud)

我想颠倒订单,先打印除1美元以外的所有商品,然后再打印1美元:

United Arab Emirates AE
Run Code Online (Sandbox Code Playgroud)

我怎么能做"除了场1之外的一切"技巧?

perl awk sed

96
推荐指数
7
解决办法
11万
查看次数

Perl 不能将 last 与 while 语句修饰符一起使用

Perl 可以:

perl -le '$d=1; while(1){ $d/=2 and ++$i or last } print "i=$i"'
Run Code Online (Sandbox Code Playgroud)

但不是:

perl -le '$d=1; $d/=2 and ++$i or last while 1; print "i=$i"'
Run Code Online (Sandbox Code Playgroud)

这导致:

Can't "last" outside a loop block at -e line 1.
Run Code Online (Sandbox Code Playgroud)

这是一般情况还是此特定语句中的某些内容阻止了last此处?没有perl的使用能够做到last语句修饰(while/ until/for在早期版本在结束)?我现在在 v5.26 上进行了测试,并且没有现成的旧版本。

perl

11
推荐指数
1
解决办法
244
查看次数

希望perl regexp替换重新启动并避免"1 while"技巧

示例:我想删除重复的字符,$s如下所示:

my $s = 'aabbbcbbac';
1 while $s =~ s/((.).*)\2/$1/;
print $s, "\n";                     #prints abc
Run Code Online (Sandbox Code Playgroud)

是否有一种简单而简短的方法可以避免这个1 while伎俩,并且只删除一个重复项s///g?让它以某种方式"重新开始"?通过使用\G或某种后视| -ahead?只是添加/g不是这里的解决方案.

regex perl

3
推荐指数
2
解决办法
84
查看次数

hashref查找中的语法错误,看不到原因

perl -E 'say for map s/(æ|ø|å)/   {qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
perl -E 'say for map s/(æ|ø|å)/"".{qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
Run Code Online (Sandbox Code Playgroud)

上面的第一行给了我,syntax error at -e line 1, near "}->"但第二行给了我roedgulblaa预期的一样。这是编译器的弱点,还是有我看不见的某些原因?我测试并在版本5.10、5.22和5.26中获得了此行为。

perl reference hashref

3
推荐指数
1
解决办法
91
查看次数

Postgres。通过将 BIGINT 切换为 INT 我可以期待良好的加速吗

这个 Postgres 数据库拥有各种大小的表,最多可达 1000 万行。几乎所有的都有一个 BIGINT 主键,从 1 开始计数。

由于 BIGINT 是 64 位,但 1000 万行完全在 INT 的 20 亿最大值之内,因此是否值得将这些 BIGINT 列转换为 INT(32 位)和 SMALLINT(16 位)以加速某些重型 SQL?更紧凑地存储索引/表应该会给我们带来更高的缓存命中率。如果有的话,我能期望多少加速?不使用 BIGINT 有什么缺点吗?(假设达到 INT/SMALLINT 的最大值永远不会成为问题)

database postgresql database-indexes

3
推荐指数
1
解决办法
2376
查看次数

自动提交关闭,开始并警告正在进行的事务

我喜欢在我的~/.psqlrc

\set autocommit off
Run Code Online (Sandbox Code Playgroud)

我也喜欢我的filename.sql脚本顶部的这个:

BEGIN;
Run Code Online (Sandbox Code Playgroud)

...以防这些脚本由使用自动提交的其他人运行。

但是,这会发出警告:

WARNING:  there is already a transaction in progress
Run Code Online (Sandbox Code Playgroud)

如何关闭那些烦人的警告?有什么BEGIN IF NOT ALREADY BEGUN命令吗?

postgresql autocommit psql

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

一个字母的子名称。什么时候是个坏主意?

我在调用一个类似于下面的测试的只有一个字母的 sub 时遇到了问题。而且我无法找到一些允许字母而不是这里的逻辑。有没有?我明白为什么sub m是一个坏主意,因为它与m(regex), 等价的/regex/. 但为什么是其他人?

在下面的测试中,a、D、E、F 都可以。其余的syntax error根据 perl v5.26 和 v5.30(我检查的唯一两个版本)

perl -le'sub a{3*pop} print "a: ",a(7)-a(5)'              #prints 6
perl -le'sub b{3*pop} print "b: ",b(7)-b(5)'              #syntax error
perl -le'sub c{3*pop} print "c: ",c(7)-c(5)'              #syntax error
perl -le'sub d{3*pop} print "d: ",d(7)-d(5)'              #syntax error
perl -le'sub e{3*pop} print "e: ",e(7)-e(5)'              #syntax error
perl -le'sub f{3*pop} print "f: ",f(7)-f(5)'              #syntax error
perl -le'sub A{3*pop} print "A: ",A(7)-A(5)'              #syntax error
perl -le'sub B{3*pop} …
Run Code Online (Sandbox Code Playgroud)

perl

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