Войти

Показать полную графическую версию : [решено] awk замена текста во втором столбце


shmel_sv@vk
13-09-2015, 14:21
доброго времени суток
нигде не могу найти решение, но думаю в AWK 'nj djpvj;yj
как можно заменить текст_1 на текст_2 в втором столбце и вывести только те строки которые заменены?
спасибо

shmel_sv@vk
13-09-2015, 14:53
пробую вот это (без поиска во втором столбце)
awk "{if(gsub(/"2008-09-19"/,"2008.09.17")){print}}" nfo.txt>1.txt

выходит ахинея
меняет значения на 2008.090.17

awk "{if(gsub(/"2008-09-19"/,"2008-09-17")){print}}" nfo.txt>1.txt
меняет значения на 1982 (тоесть минусует цыфры)

shmel_sv@vk
13-09-2015, 15:15
разобрался
awk "{if(sub(/2008-09-19/,\"2008-09-17\")){print}}"

shmel_sv@vk
13-09-2015, 16:26
блин. все же вопрос на счет изменений только во втором столбце я ж не решил

Iska
13-09-2015, 17:50
Коллега, завязывайте чатиться сам с собой. Лучше упакуйте Ваш «nfo.txt» в архив, приложите к сообщению или выложите на RGhost. На всякий случай, поясните, что есть «второй столбец». Укажите, что именно и по каким критериям ищем, на что меняем.

shmel_sv@vk
13-09-2015, 23:26
часов 8 на поиски ответа и я нашел

gawk "{print $1, gensub(/(2008)/,\"\\1 ADDED\", \"g\", $2)}" "OFS=\t" "FS=\t" nfo.txt>z1.txt

но. как печатать только строки которые совпали типа if(gensub)
простоя не разбираюсь в awk

Foreigner
14-09-2015, 02:36
А что за файл? Приведите пример строки, иначе никак.

shmel_sv@vk
14-09-2015, 12:19
вот строки в файле. жирным выделено то, что оно находит. именно эти строки мне и нужны.
сейчас оно пишет все строки и меняет значения во второй колонке как мне надо
я в принципе понял что потом могу отфильтровать через sed


много_разных_букв_и_какаято_инфа_2007_или_2008_или_еще_чтото 2008-12-4
много_разных_букв_и_какаято_инфа_2007_или_2008_или_еще_чтото 2008-12-4
много_разных_букв_и_какаято_инфа_2007_или_2008_или_еще_чтото 2006-12-4
много_разных_букв_и_какаято_инфа_2007_или_2001_или_еще_чтото 2007-12-4


ps. не могу правильно вставить код. но разделитель табуляция

Foreigner
14-09-2015, 13:37
Только год?

sed -rn "s/.+\s(2008)-.*/\1/p" nfo.txt > 1.txt

Или вторую колонку?

sed -rn "s/.+\s(2008.+)/\1/p" nfo.txt > 1.txt

shmel_sv@vk
14-09-2015, 14:16
вторую колонку:)
спасибо!!!




© OSzone.net 2001-2012