LINUX.ORG.RU

Редактирование текста в пределах одного culumn

 , , ,


0

2

Добрый день. Сейчас пишу второй свой скрипт на bash=) и появилась небольшая проблема: 1) необходимо внести корректировки по всем строкам только 2-ого столбца и записать в 3-ий

2) провести запись названий файлов с папки в 4-ый столбец;

3) сравнить названия построчно 3-его и 4-ого столбца; Пример .csv таблицы:

/home/scripts/1.xm http://ex.ua/films/vo_125.txt

/home/scripts/2.xm http://ex.ua/films/vo_126.txt

/home/scripts/3.xm http://ex.ua/films/vo_129.txt

1) Мне необходимо в 3-ий столбец скопировать только данные

vo_125.txt

vo_126.txt

vo_129.txt

2) В папке /home/scripts/folder/ файлы

vo_12.txt

vo_126.txt

vo_129.txt

Их названия записать в 4-ый столбец

3) сравнить названия построчно 3-его и 4-ого столбца и, к примеру, записать true/false в 5 столбец

Итог:

/home/scripts/1.xm http://ex.ua/films/vo_125.txt vo_125.txt vo_12.txt false

/home/scripts/2.xm http://ex.ua/films/vo_126.txt vo_126.txt vo_126.txt true

/home/scripts/3.xm http://ex.ua/films/vo_129.txt vo_126.txt vo_126.txt true

Заранее большое спасибо.



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

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

Для домашних/лабораторных работ есть раздел Job. В следующий раз учту. P.S. ссылки битые. Ссылки указаны как пример.

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

В таблице в втором столбце есть http://ex.ua/films/vo_125.txt Как сделать grep и записать только vo_125.txt в третий столбец? То есть мне построчно нужно скопировать все что начинается с vo_ до .txt в 3-ий столбец

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

В таблице в втором столбце есть http://ex.ua/films/vo_125.txt Как сделать grep и записать только vo_125.txt в третий столбец?

Вам не нужно «делать grep». Вы же ГНУ Баш изучаете, а не ненормальное программирование, верно?

То есть мне построчно нужно скопировать все что начинается с vo_ до .txt в 3-ий столбец

А не последний элемент пути взять, не?

Ладно, поскольку вы не осилили написать ни строчки, надо полагать, что лекцию, где это рассказывалось, вы прогуляли. Так что спрашивать, что вы там проходили, вас бесполезно.

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

Вы сообщили противоречивую информацию о том, какой разделитель между собственно полями: сказали CSV, а в примере ни одной запятой. Ну положим, что они там должны быть:

$ cat binster.in
/home/scripts/1.xm,http://ex.ua/films/vo_125.txt
/home/scripts/2.xm,http://ex.ua/films/vo_126.txt
/home/scripts/3.xm,http://ex.ua/films/vo_129.txt

Тогда в простейшем случае нужно что-то такое:

#!/bin/bash

while IFS=',' read -r xm uri; do
    printf "%s,%s,%s\n" "$xm" "$uri" "${uri##*/}"
done

Но возможно от вас ожидают именно разбиения строки на элементы:

#!/bin/bash

while IFS=',' read -r xm uri; do
    IFS='/' read -ra uri_split <<< "$uri"
    printf "%s,%s,%s\n" "$xm" "$uri" "${uri_split[-1]}"
done
Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от Zmicier

Возможно, впрочем, что это вы просто застряли, а курс-то уже ушел вперед, и вместо наивного printf "%s,%s,%s\n" от вас ждет уже чего-то более. Например, такого:

#!/bin/bash

printj ()
{
    local IFS="$1"
    shift
    printf "%s\n" "$*"
}

fs=','

while IFS="$fs" read -r xm uri; do
    printj "$fs" "$xm" "$uri" "${uri##*/}"
done
Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Разделитель в таблице Тab

awk '{print $2}' binster.csv

http://ex.ua/films/vo_125.txt

http://ex.ua/films/vo_126.txt

http://ex.ua/films/vo_129.txt

Мне необходимо скопировать все, что после http://ex.ua/films/ и до .txt и записать в $3 столбец.

Чтобы было так awk '{print $2 $3}' binster.csv

http://ex.ua/films/vo_125.txt vo_125

http://ex.ua/films/vo_126.txt vo_126

http://ex.ua/films/vo_129.txt vo_129

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

все, что после http://ex.ua/films/ и до .txt

О! Условия меняются на ходу! Ну это просто через промежуточное присвоение — в ГНУ Баше нет конструкции типа ${var##*/%.*}

И прочитайте вы уже об’явление под формой ввода.

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

Чёт проиграл.

А ещё раз можешь так же остро шуткануть?

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

Условие не меняется=( К примеру, я могу скопировать весь второй столбец в третий

awk '$3=$2' binster.csv > binster1.csv

Новый файл с тремя столбцами cat binster1.csv /home/scripts/1.xm http://ex.ua/films/vo_125.txt http://ex.ua/films/vo_125.txt

/home/scripts/2.xm http://ex.ua/films/vo_126.txt http://ex.ua/films/vo_126.txt

/home/scripts/3.xm http://ex.ua/films/vo_129.txt http://ex.ua/films/vo_129.txt

Если нет возможности скопировать с 2 в 3 столбец все от http://ex.ua/films/ и до .txt или все от http://ex.ua/films/, то как можно с третьего столбца удалить http://ex.ua/films/ Тогда останется в третьем столбце только vo_125.txt

vo_126.txt

vo_129.txt

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

Условие не меняется=(

У меня все ходы записаны.

Раз: «Мне необходимо в 3-ий столбец скопировать только данные: vo_125.txt ...». Два: «Чтобы было так: http://ex.ua/films/vo_125.txt vo_125 ...».

awk '$3=$2'...

Откуда вообще у вас всплыл АВК?

Если нет возможности...
Новый файл с тремя столбцами cat binster1.csv /home/scripts/1.xm http://ex.ua/films/vo_125.txt http://ex.ua/films/vo_125.txt

Не вняли ни написанному по существу, ни об’явлению под формой ввода. Жаль.

Извините, я ошибся — у вас проблема фундаментальней, чем я сперва подумал. Советую обратиться к грамотному педагогу.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 3)
Ответ на: комментарий от Zmicier

Zmicier, Извините, я ошибся — у вас проблема фундаментальней, чем я сперва подумал. Советую обратиться к грамотному педагогу. Учту=) Решением стало:

cat binster.csv | awk '{print $2}' | grep -Eo «vo_*[a-zA-Z0-9./?=_-]*.txt» > binster1.csv

cat binster1.csv vo_125.txt vo_126.txt vo_129.txt

paste binster.csv binster1.csv > binster2.csv

/home/scripts/1.xm http://ex.ua/films/vo_125.txt vo_125.txt /home/scripts/2.xm http://ex.ua/films/vo_126.txt vo_126.txt /home/scripts/3.xm http://ex.ua/films/vo_129.txt vo_129.txt Большое спасибо, что не смогли помочь=) Если у кого то появится мысль как это все упростить, буду рад предложениям.

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

Чем плох ответ уважаемого Binster? Форками? Такто-дроч какой-то.

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