F1 F2 F3 F4 F5 F6
4 ABCDEF1234 1111111111 20090101 00:00:00 XYZ 123
출력 :
는4 ABCDEF1234 1111111111 20090101-00:00:00 XYZ 123
F는 필드를 나타낸다. F4 및 F5는 하이픈으로 연결해야하는 날짜 필드입니다. 이 작업을 수행하는 빠른 Perl 스크립트가 있습니까?
F1 F2 F3 F4 F5 F6
4 ABCDEF1234 1111111111 20090101 00:00:00 XYZ 123
출력 :
는4 ABCDEF1234 1111111111 20090101-00:00:00 XYZ 123
F는 필드를 나타낸다. F4 및 F5는 하이픈으로 연결해야하는 날짜 필드입니다. 이 작업을 수행하는 빠른 Perl 스크립트가 있습니까?
printf("%-4s%s %s %s-%s %s\n", $F1, $F2, $F3, $F4, $F5, $F6);
이 답변은 필드가 이미 $ F1 .. $ F6 변수로 분할되어 있다고 가정합니다. 데이터가 단일 문자열이면 정규식 응답이 더 적절합니다.
s/(\d{8})\s+(\d{2}:\d{2}:\d{2})/$1-$2/
$str = "4 ABCDEF1234 1111111111 20090101 00:00:00 XYZ 123";
@s = split /\s/,$str;
$s[5] = join("-",$s[5],$s[6]);
splice(@s,6,1);
print join(" ",@s);
입력은 pack
및 unpack
제안 고정 폭 (Y)의 종류를 보인다. 충분히 고정 않다면 다시 그런
my @F = unpack('A4 A11 A11 A19 A7', $input_line);
$F[3] =~ s/\d\K\s+/-/; # Use lookaround (?<=\d) if \K is not available
my $line = pack('A4 A11 A11 A19 A7', @F);
, 당신은 갈 수 있습니다 :
substr($input_line, 34, 1, '-');
직접 명령 줄에서 :
을 :$ perl -n -e '@fields = split; printf "%s %s %s %s-%s %s %s\n", $fields[0], $fields[1], $fields[2], $fields[3], $fields[4], $fields[5]' input.txt > output.txt
이가 넣어 동등 기억
#!/usr/bin/perl -w
while (<>) {
@fields = split;
printf "%s %s %s %s-%s %s %s\n", $fields[0], $fields[1], $fields[2], $fields[3], $fields[4], $fields[5];
}
형식이 fixed co lumn 폭 : 같은
perl -pe'substr$_,34,1,"-"'
그렇지 않으면 뭔가 : 질문의
perl -ane'printf"%-4s%s %s %s-%s %s\n",@F'
+1 (나는 더 짧은 길이 있다는 것을 알고 있었다!) –
흥미롭게도 다른 해석. 물론 자동 분리 모드와 마찬가지로 의도 된 F [0] .. $ F [5] 일 수도 있습니다. –
@ chaos : 나는 똑같이 올리려고하고 있었다. :-) –