我有一个简单的要求如下,
我得到绝对目录的文件名.
例如,/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函数或任何其他函数?
使用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中工作.
我想迭代字典的键,首先按值(降序)排序,然后按键(升序)排序
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) 我正在使用Perl来解析一个文本文件,该文件可能是也可能不是gzip:
my $FILE;
if ( $file =~ /\.gz$/ ) {
open( $FILE, "gunzip -c $file |" ) || die $!;
} else {
open( $FILE, '<', $file ) || die $!;
}
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来处理这个?