列でテキストファイルを検索

列でテキストファイルを検索

次の形式のファイルがあります。

[#]   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";
    }
}

おすすめ記事