Я - новичок для избиения сценариев, и я не могу найти решение своей проблемы. У меня есть список строк как в файле input.txt, разделенном символом новой строки:
TATAMOTORS
TCS
RELIANCE
MARUTI
У меня есть другой файл target.txt больше чем с 1 000 строк в формате CSV, который имеет следующий формат:
124,1940000,792,TATAMOTORS,172.1.1.21,mode1,12:00:00,1,21,0,23,23,014,1000,alive,1,17,23
Я хочу заменить время в поле номер 7 к 24:00:00 для всех строк, где столбец 4 (здесь TATAMOTORS) соответствует любой из строк в файле input.txt.
Я могу сделать это с простой командой/сценарием удара?
Другой способ использования bash и sed:
while read token; do
sed -i "/$token/{s/,[^,]*/,24:00:00/6}" target.txt
done < input.txt
Этот скрипт считывает input.txt
построчно и помещает значение строки в переменную token
.
sed
выполняет замену 6-го совпадения регулярного выражения только для строки, содержащей $token
.
-i
указывает, что файлы должны редактироваться на месте.
Вы можете сделать это с помощью простой команды / скрипта Awk:
awk -F, '
BEGIN{OFS=FS}
NR==FNR {a[$1]++; next}
$4 in a {$7 = "24:00:00"}
1
' input.txt target.txt