次の形式のファイルがあります。
[#] OWNER_NAME NAME SIZE
[6] Robottinosino Software 200
[42] Robottinosino Ideas worth zero 188
[12] Robottinosino Ideas worth zero or more 111
[13] I am Batman Hardware 180
[25] Robottinosino Profile Pictures 170
コマンドラインツールを使用して次のことをしたいと思います。
my_command "Ideas worth zero"
結果は次のとおりです。
42
そして、次のような結果を得る危険を冒さないでください。
12
grepを使用して行を識別し、awkを使用して最初のフィールドを取得することを検討しましたが、テキスト「OWNER_NAME」と「SIZE」が表示される列を計算するのではなく、「NAME」フィールド全体を確実かつ効率的に一致させる方法よくわかりません。ヘッダーにスペースを切り取り、その間のすべての内容を取得します。
「OWNER_NAME」は 2 語以上にすることができます。たとえば、「OWNER_NAME」=「I am Batman」です。
どのアイデアとそれに応じた実装がありますか?
ここで使用するのは、cat、head、tail、awk、sed、grep、cutなどの古い系列だけです。
ベストアンサー1
さて、列の長さがわからない場合は、bashよりも強力な言語に切り替えます。
#!/usr/bin/perl
use warnings;
use strict;
my $string = shift;
open my $FH, '<', '1.txt' or die $!;
my $first_line = <$FH>;
my ($before, $name) = $first_line =~ /(.* )(NAME *)/;
my $column = length $before;
$string .= ' ' x (length($name) - length $string); # adjust the length of $string
while (<$FH>) {
if ($column == index $_, $string, $column) {
/^\[([0-9]+)\]/ and print "$1\n";
}
}