переформатировать текст в Perl - PullRequest
3 голосов
/ 10 июня 2010

У меня есть файл из 1000 строк, каждая строка в формате

filename dd/mm/yyyy hh:mm:ss

Я хочу преобразовать это в

filename mmddhhmm.ss

пытался сделать это в perl и awk - безуспешно - был бы признателен за любую помощь

спасибо

Ответы [ 4 ]

4 голосов
/ 10 июня 2010

Вы можете сделать простую замену регулярного выражения, если формат действительно фиксирован:

s|(..)/(..)/.... (..):(..):(..)$|$2$1$3$4.$5|

Я использовал | в качестве разделителя, чтобы мне не нужно было экранировать косую черту.1006 * Вы можете использовать это с Perl на месте оболочки:

perl -pi -e 's|(..)/(..)/.... (..):(..):(..)$|$2$1$3$4.$5|' file

(посмотрите описания опций с помощью man perlrun).

1 голос
/ 10 июня 2010

Передайте файл в скрипт на Perl с помощью:

while( my line = <> ){
    if ( $line =~ /(\S+)\s+\(d{2})\/(\d{2})/\d{4}\s+(\d{2}):(\d{2}):(\d{2})/ ) {
        print $1 . " " . $3 . $2 . $4 . $5 . '.' . $6;
    }
}

Перенаправьте вывод так, как вы хотите.Это означает соответствие строки: (без пробела> = 1) пробел> = 1 (2 цифры) / (2 цифры) / 4 цифры whitepsace> = 1 (2 цифры) :( 2 цифры) :( 2 цифры)

Захват группв () пронумерованы от 1 до 6 слева направо.

1 голос
/ 10 июня 2010

Другой, несколько уродливый подход: каждая строка кода ($ str здесь), которую вы получаете из файла, делает что-то вроде этого:

my $str = 'filename 26/12/2010 21:09:12';

my @arr1 = split(' ',$str);
my @arr2 = split('/',$arr1[1]);
my @arr3 = split(':',$arr1[2]);

my $day = $arr2[0]; 
my $month = $arr2[1]; 
my $year = $arr2[2];

my $hours = $arr3[0]; 
my $minutes = $arr3[1]; 
my $seconds = $arr3[2];

print $arr1[0].' '.$month.$day.$year.$hours.$minutes.'.'.$seconds;
0 голосов
/ 10 июня 2010

Использование sed:

sed -r 's|/[0-9]{4} ||; s|/||; s/://; s/:/./' file.txt
  • удалить год /yyyy
  • удалить оставшуюся косую черту
  • удалить первое двоеточие
  • изменить оставшийся двоеточие на точку

Использование awk:

awk '{split($2,d,"/"); split($3,t,":"); print $1, d[1] d[2] t[1] t[2] "." t[3]}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...