行に文字がある場合は、行を列に分割します。

行に文字がある場合は、行を列に分割します。

New Dataファイルにフレーズが見つかるたびに、新しい行を開始して行を列に分割したいと思います。

入力する

New Data
52.6114082616
41.8319773432
75.6986111112
74.6176129172
New Data
100.0
100.0
100.0
8.00000000003
99.7916666667
42.435664564566

出力

52.6114082616 41.8319773432 75.6986111112 74.6176129172
100.0 100.0 100.0 8.00000000003 99.7916666667 42.435664564566

私は前に試しましたxargs

awk '{print$1}' file.txt  | xargs -n2 echo

しかし、これには空行は含まれません。空行も必要です。

答え1

awk代替区切り記号を提供するために使用されます。

awk '/^New Data/ {sep=ORS; next} {printf "%s", sep $0; sep=OFS} END{print ""}' file

レコードが正規表現と一致する場合は^New Data/newlinesepに変更され、そうでない場合は/spaceに変更されます。ORSsepOFS

答え2

パールの使用:

$ perl -lne '$\=" ";if (/New Data/){ $\="\n"; s/.*//g; } ;print $_;print "\n" if eof' file

52.6114082616 41.8319773432 75.6986111112 74.6176129172 
100.0 100.0 100.0 8.00000000003 99.7916666667 42.435664564566 

答え3

POSIX sed。 sedのパターン空間は、新しいデータを含む行に会うまで読み取ったすべての行を累積します。この時点でパターンスペースを印刷して削除し、sedスクリプトの一番上に戻って詳細を確認します。パターン空間で新しい先頭データラインを切り取ることに注意することが重要です。テストコマンドtは、次の新しいデータが表示されるまで改行文字を空白に変換し続けます。その後、サイクルを繰り返します。

sed -e ':a
  $!N;/^New Data\n/D
  /\nNew Data$/! s/\n/ /;ta
  P;D
' file

GNU sed:ここでは、予約されたスペースに新しいデータラインではなくデータラインを蓄積します。新しいデータ行が見つかると(最初のデータ行が削除された場合)、保存に保存されているコンテンツを取得して保存を消去します。次に、すべての改行を空白に変更します。

sed -e '
  /^New Data$/!{H;$!d;}
  1d;z;x;s/.//;y/\n/ /
' file

Perlのslurrpモード:ファイル全体をPerlのパターンスペース$ _に読み込みます。

オプション:

: `-0777` slurps the input intob$_. 
: `-l` sets   ORS = RS = \n
: `-a` autosplits the pattern space ibto fields and pytsin @F array. 
 `-n` no print the pattern space by default.
: `-F` specifies the field delimiter used to split the pattern space.

特殊変数:

 : `$"` value is space by default.
 : `$\ ` output record separator newline
 : `$#F` index of the last element of tge array @F, indices start from zero. 

perl -F'/^New\hData\n/m' -lan -0777e '
  print join $", split $\ for @F[1..$#F];
' file 


perl -lne '
  push @A, $_ if ! /^New Data$/;
  print join $", splice @A if eof || // && $.>1;
' file 


perl -lpe '
  ($_, $p, $\)
    = /New/ ? ($p, undef, defined $p ? $/ : $,)
    : ! eof ? ($p, $_,    defined $p ? $" : $,)
    :         (qq[$p$"$_], "foo", $/)
    ;
' file

出力:

52.6114082616 41.8319773432 75.6986111112 74.6176129172
100.0 100.0 100.0 8.00000000003 99.7916666667 42.435664564566

関連情報