awk perl 新しい行の最初の列をコピー

awk perl 新しい行の最初の列をコピー

私はbashを使用し、次のテーブルがあります

001_1_174    [g/n                         474536         482492          
mo[g/n                    482492         504062          
'er/                      504062         517352          
ruze                      517352         529562                  
001_1_400    uz[`f                         960192        966656           
.ire                      966656         984416           
tuf/[                     984416         1006166

最初の行(数字と下線のみを含む)の文字列を別の数字まで別の行にコピーし、次の数字に対してこれを行いたいと思います。

このように

001_1_174    [g/n                    474536         482492           
001_1_174  mo[g/n                    482492         504062           
001_1_174  'er/                      504062         517352           
001_1_174  ruze                      517352       529562                  
001_1_400    uz[`f                   960192        966656           
001_1_400   .ire                      966656         984416           
001_1_400   tuf/[                     984416         1006166

ベストアンサー1

シングルライナーを好む場合は、Perlを使用してください。

$ perl -pe 'if (/^\s*([\d_]+)/) {$x=$1} else {$_="$x $_"}' input.txt

それ以外の場合は、スクリプトで次の操作を行います。

use warnings;
use strict;

my $prefix;
while (<>) {
    if ( /^\s*([\d_]+)/ )
        { $prefix = $1 }
    else { $_ = "$prefix $_" }
    print;
}

両方出力:

001_1_174    [g/n                         474536         482492          
001_1_174 mo[g/n                    482492         504062          
001_1_174 'er/                      504062         517352          
001_1_174 ruze                      517352         529562                  
001_1_400    uz[`f                         960192        966656           
001_1_400 .ire                      966656         984416           
001_1_400 tuf/[                     984416         1006166

正規表現は「数字と下線のみ」仕様に基づいており、行の先頭にスペースを入れることができます(\s*望ましくない場合は削除)。さらに、これはいいえ読んだ最初の行が数字で始まらない場合は正常に動作します!

おすすめ記事