LINUX.ORG.RU

продублировать строку


1

3

есть файл текстовый, такой формат

a

b

c

d

нужно дубль через запятую сделать без пробела.

a,a

b,b

c,c

d,d

можно както по проще?

спасибо

Перемещено hibou из talks

★★

Последнее исправление: qsloqs (всего исправлений: 1)

В толксах?
Яззабан!

CYB3R ★★★★★
()

paste -d ',' input.txt input.txt > output.txt

Spoofing ★★★★★
()

awk '{ print $0 "," $0 }' infile. txt

Davidov ★★★★
()
Ответ на: комментарий от theNamelessOne

Естественно, если рассматривать формат приведенного файла не буквально, то нужно изменить класс символов и/или добавить квантификацию

theNamelessOne ★★★★★
()

Иногда, когда не хочется возиться со скриптами, в этом может помочь OOo Calc.

Sadler ★★★
()
 - Пуск -> выполнить -> notepad.exe
 - Файл -> открыть -> Имя файла с кириллицей и пробелами(1).txt
 - Для каждой строчки сделать следующее:
     - Выделить текст мышкой
     - Правка -> копировать
     - Напечатать ',' (без кавычек)
     - Правка -> вставить
 - Файл -> сохранить
 - Файл -> закрыть
DELIRIUM ☆☆☆☆☆
()
Последнее исправление: DELIRIUM (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM

А не запаритесь, если строчек миллионов десять? Да и notepad ваш скорее сдохнет, чем сумеет отобразить такой файл.

Sadler ★★★
()
Ответ на: комментарий от DELIRIUM
    - Выделить текст мышкой
    - Правка -> копировать
    - Напечатать ',' (без кавычек)

Так выделенный текст же замениться на запятую. Не работает.

Xenon ★★★
()
Ответ на: комментарий от DELIRIUM

Какой патч, тут налицо принципиальный недостаток by design! Надо бы Поттерингу показать, он сумеет помочь.

quiet_readonly ★★★★
()
Ответ на: комментарий от DELIRIUM

Да, пожалуй, это будет лучше всего. Только после «Правка->копировать» нужно добавить ещё «Правка->Вставить», чтобы выделение снять.

Miguel ★★★★★
()
$ cat file1 | while read A ; do echo "$A,$A" ; done > file2

file1 - исходный файл, file2 - результирующий

Kroz ★★★★★
()
Ответ на: комментарий от nexfwall

если уж на то пошло, то

f = File.new('input.txt', 'r+')
f.readlines.each do |l|
        puts l.sub(/(\w+)/, '\1, \1')
end
Кстати, ставлю носки, что можно написать раза в три короче. Кто сделает? На руби, ясно дело.

cdshines ★★★★★
()
Ответ на: комментарий от nexfwall

ruby -pi.bak -e «sub(/(\p{Any}+)(?=\n)/, '\1, \1')» test.txt

Памагите с регуляркой, эта выглядит, как говно, и наверняка не работает на всем множестве случаев.

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Ну если короче, использовать надо так:

cat file.txt | perl -e 'print($_,',',$_) while (<>);' > out.txt
Или так:
perl -e 'print($_,',',$_) while (<>);' file.txt > out.txt

А если подробнее, то <> это пустой файловый дескриптор, в который perl автоматически подставляет файлы указанные в аргументах, а после (или сразу, если аргументов нету) подставляет STDIN. Все это в цикле while, который спокойно берет одну строку и вставляет в «стандартную переменную» _ . Данный кусок полностью аналогичен тому, что я представил на bash.

P.S. Это был ответ на тот комментарий, который ты удалил. Так уж и быть, оставлю

nexfwall ★★★★
()
Ответ на: комментарий от cdshines

А регулярку то зачем? Просто читай строку, и дублируй через запятую. Да и в регулярках не силён.

nexfwall ★★★★
()
Ответ на: комментарий от nexfwall

Я удалил, потому что он оставлял только запятые, потому что я забыл скобки:/ И вообще, регулярные выражения в руби медленнее прямой работы со строками, особенно на больших объемах, поэтому я попробую ради интереса сделать без них.

cdshines ★★★★★
()
Ответ на: комментарий от tides

Наверно самое лучшее решение на sed в этом треде

nexfwall ★★★★
()
Ответ на: комментарий от nexfwall
ruby -pi.bak -e 'print($_.chomp,", ")' test.txt

На больших файлах должно быть вроде быстрее, чем с регулярками.

cdshines ★★★★★
()
Ответ на: комментарий от zolden

h добавляет найденное в hold buffer, а G добавляет его содержимое к pattern buffer, получается, что нужно только заменить перевод на запятую, так?

cdshines ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.