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
/ newline sep
으로 변경되고 , 그렇지 않으면 /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