LINUX.ORG.RU

Редактирование строк


0

2

Имеется текстовый файл (на самом деле в нём строк больше, но для простоты возьмём три):

$ cat ex.txt
aaa
bbb
ccc
Хочется добавить в конец каждой строки расширение «.tk_номер_строки». Делаю:
cat ex.txt | for i in $(seq 1 3); do sed 's/$/'.tk$i'/'; done
Но в результате везде добавляется .tk1 вместо ожидаемых .tk2 и .tk3. Помогите разобраться.

★★★

Ответ на: комментарий от yozan

а можно так:

sed = | sed -n 'h;n;G;s/\n/\.tk/;p'

anonymous
()
Ответ на: комментарий от yozan

Ого, мощно! Походу, ещё возник вопрос. Допустим, есть пара текстовых файлов:

$cat file1
aaa
bbb
ccc
$cat file2
ddd
eee
fff
Хочется по порядку добавлять строки из file2 в конец второй строки в file1 и после каждого добавления сохранять результат в «newfile_номер_добавленной_строки_из_file2». Пока не нашёл, как это реализовать через sed и awk. Может здешние гуру помогут :)

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

можно было бы ещё результат написать, который хотелось получить

$ cat file1
aaa
bbb
ccc
$ cat file2
ddd
eee
fff
$ a=1; while read f1 && read f2 <&2; do echo "$f1 $f2 $a"; a=$(($a + 1)); done <file1 2< file2
aaa ddd 1
bbb eee 2
ccc fff 3

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

То есть в результате должны получиться три новых файла (newfile1, newfile2 newfile3), содержимое которых идентично file1, за исключением второй строки, которая должна быть «bbbddd», «bbbeee», «bbbfff» для каждого нового файла соответственно.

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

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

$cat newfile1
aaa
bbbddd
ccc
$cat newfile2
aaa
bbbeee
ccc
$cat newfile3
aaa
bbbfff
ccc

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

Большое спасибо! Это то, что надо.

dadd ★★★
() автор топика
Ответ на: комментарий от anonymous
xargs -i awk -v l={} 'NR == 2 {$0 = $0 l}; 1' file1 < file2
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.