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に変更されます。ORS
sep
OFS
答え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