私は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*
望ましくない場合は削除)。さらに、これはいいえ読んだ最初の行が数字で始まらない場合は正常に動作します!