Помогите пожалуйста, с такой задачкой.
Имеется файл вида:a cappella,abbandono,accrescendo,affettuoso,agilmente
a la mode,advanced,avant-garde,chic,contemporary,dashing
a priori,a fortiori,a posteriori,analytic,back,backwardНужен скрипт (или пнуть куда копать) отсекающий все слова после третьего в каждой строке, включая запятую.
>Помогите пожалуйста, с такой задачкой.
>Имеется файл вида:
>
>a cappella,abbandono,accrescendo,affettuoso,agilmente
>a la mode,advanced,avant-garde,chic,contemporary,dashing
>a priori,a fortiori,a posteriori,analytic,back,backward
>
>Нужен скрипт (или пнуть куда копать) отсекающий все слова после третьего в
>каждой строке, включая запятую.
Вот вам быстренький и грязненький способ :-)#!/usr/bin/perl -wuse strict;
open (F, $ARGV[0]); # имя файла передаем скрипту как аргумент
my @array; # объявляем массив
# Начинаем считывать построчно содержимое файла
while (<F>) {
@array = split(",",$_); # записываем элементы строки в массив, используя запятые как разделители
print qq($_); # выводим на печать исходную строку
print qq($array[0] $array[1] $array[2]\n); # а теперь печатаем только три первых элемента массива
}
close F; # закрываем файл
А вот результат работы этого скрипта:> ./words.pl words.txt
a cappella,abbandono,accrescendo,affettuoso,agilmente
a cappella abbandono accrescendo
a la mode,advanced,avant-garde,chic,contemporary,dashing
a la mode advanced avant-garde
a priori,a fortiori,a posteriori,analytic,back,backward
a priori a fortiori a posteriori
Спасибо!
Кошмар :) Может лучше что-нибудь вроде этого (тоже, впрочем, несовершенного)?#!/usr/bin/perl -w
while(<>) {
$_ =~ s/^([^,]*),([^,]*),([^,]*).*$/$1 $2 $3/;
print;
}
Аналогичное регулярное выражение можно использовать и с sed... Если это единственное, что необходимо проделать с текстом.
еще можно пользовать параметр перла F
нечто вроде#!/usr/bin/perl -naF,
BEGIN {
# разделитель выходных записей
$\ = "\n";
# разделитель полей вывода
$, = ",";
}print @F[1..3];
Божежмой!
А не проще ли сделать
cut -d, -f -3
?!!если не нужны запятые, то добавить
tr ',' ' '
>Божежмой!
>А не проще ли сделать
> cut -d, -f -3
>?!!
>
>если не нужны запятые, то добавить
> tr ',' ' 'Дык товарищ Vlad вроде решение на Perl ищет, иначе зачем ему в "перловый" подраздел
писать? Хотя, конечно, он мог и просто промахнуться, но это лучше уже у него спросить...
>>Божежмой!
>>А не проще ли сделать
>> cut -d, -f -3
>>?!!
>>
>>если не нужны запятые, то добавить
>> tr ',' ' '
>
>Дык товарищ Vlad вроде решение на Perl ищет, иначе зачем ему в
>"перловый" подраздел
>писать? Хотя, конечно, он мог и просто промахнуться, но это лучше уже
>у него спросить...Ээ... Тогда да, погорячился я. Сорри.
О том что это про перл, видно только(?) из списка тем, а я из рассылки захожу.
>Ээ... Тогда да, погорячился я. Сорри.
>О том что это про перл, видно только(?) из списка тем, а
>я из рассылки захожу.Хм, действительно, находясь в теме, невозможно установить, к какому подразделу она
относится. Так что теперь моя очередь говорить "тоды ой". :-)