小编Chr*_*nat的帖子

使用awk substr获取最后一个字段

我有一个简单的要求如下,
我得到绝对目录的文件名.
例如,/home/parent/child/filename
我的要求是从中删除文件名.
我试过的是:

awk -F "/" '{print $5}' input
Run Code Online (Sandbox Code Playgroud)

哪作得很好.
但是$5,如果我的输入具有如下结构,那么硬编码可能会有所不同:

/home/parent/child1/child2/filename
Run Code Online (Sandbox Code Playgroud)

所以它应该是动态的,没有硬编码.这是逻辑:
始终采用最后一个将是文件名的字段(因此需要从反向检查).

任何人都可以帮我解决awk substr函数或任何其他函数?

unix awk substr

84
推荐指数
5
解决办法
13万
查看次数

Perl printf使用逗号作为千位分隔符

使用awk,我可以用逗号作为千位分隔符打印一个数字.
(export LC_ALL=en_US.UTF-8预先).

awk 'BEGIN{printf("%\047d\n", 24500)}'

24,500
Run Code Online (Sandbox Code Playgroud)

我希望使用相同的格式与Perl一起使用,但它没有:

perl -e 'printf("%\047d\n", 24500)'

%'d
Run Code Online (Sandbox Code Playgroud)

Perl Cookbook提供此解决方案:

sub commify {
    my $text = reverse $_[0];
    $text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
    return scalar reverse $text;
}
Run Code Online (Sandbox Code Playgroud)

但是我假设因为printf选项在awk中工作,所以它也应该在Perl中工作.

perl

6
推荐指数
5
解决办法
8134
查看次数

按值排序字典键,然后按键排序

我想迭代字典的键,首先按值(降序)排序,然后按键(升序)排序
let dict = ["foo" : 1, "bar" : 1, "baz" : 2, "qux" : 2]

迭代的顺序应该是:
["baz", "qux", "bar", "foo"]

我想打印:

baz 2
qux 2
bar 1
foo 1
Run Code Online (Sandbox Code Playgroud)

swift

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

Perl解析可能会或可能不会被gzip压缩的文本文件

我正在使用Perl来解析一个文本文件,该文件可能是也可能不是gzip:

my $FILE;
if ( $file =~ /\.gz$/ ) {
    open( $FILE, "gunzip -c $file |" ) || die $!;
} else {
    open( $FILE, '<', $file ) || die $!;
}
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来处理这个?

perl gzip

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

标签 统计

perl ×2

awk ×1

gzip ×1

substr ×1

swift ×1

unix ×1