LINUX.ORG.RU

Найти строчку и поменять в ней столбец

 ,


1

2

Подскажите, если не лень:)

Выглядит так:
Файл текстовый из 6-ти столбцов, разделенных разным количеством пробелов. Также есть файлик с именами юзеров.
Нужно пройтись по первому файлу с каждым именем юзера, при нахождении строки с юзером - поменять 3-й символ в 6-м столбце.

★★★★★

Ответ на: комментарий от Funny_sailor
domain.ru  aivanov                    Иванов Андрей               /path/to/aivanov \\ZZZ               NNPYYNNNNN0000000000

находим иванова и меняем NNPYYNNNNN0000000000 на NNCYYNNNNN0000000000

kott ★★★★★
() автор топика

Пусть юзеры во втором столбце

awk 'BEGIN {getline < "/path/to/user.list"; u[$1]=1};
     u[$2] {sub("REGEXP", "ЗАМЕНА", $6)}; -- это сам пиши. можно два substr вместо sub
           {print}' /path/to/file

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

Спасибо. Не получилось с твоим кодом, но принцип примерно понял. Вот что я осилил:

for i in `seq 20`; do echo "test "$i"user xxx yyy zzz">>test1;done

echo -e "3user\n5user\n11user\n15user">test2

awk '{getline < "test2"; u[$1]=$1}; {if ($2 in u) {sub("zzz", "aaa", $5); print} else print}' test1

Результат такой:

3user
5user
11user
15user
test 5user xxx yyy aaa
test 6user xxx yyy zzz
test 7user xxx yyy zzz
test 8user xxx yyy zzz
test 9user xxx yyy zzz
test 10user xxx yyy zzz
test 11user xxx yyy aaa
test 12user xxx yyy zzz
test 13user xxx yyy zzz
test 14user xxx yyy zzz
test 15user xxx yyy aaa
test 16user xxx yyy zzz
test 17user xxx yyy zzz
test 18user xxx yyy zzz
test 19user xxx yyy zzz
test 20user xxx yyy zzz

Пока не врублюсь почему.

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

u[$2] {sub(«zzz», «aaa», $5)};

Если "$2" в хеше (определен в BEGIN), т.е. содержит 1, то срабатывает {sub( ...}, иначе u[$2] == 0 и не срабатывает.

команда {print} для всех строк (изменненых и "пропущенных")

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.