Замена определённого значения в столбце на переменную
У меня есть файл, состоящий из множества строк и столбцов.( Ниже кусок в котором нужно произвести замену)
Нужно заменить значение в 5-ом столбике, на переменную(вводимую вручную (числа от 0 до бесконечности)).
Пробовал через SED, но он иногда изменяет соседние столбцы, видимо из-за возникающих иногда совпадений.
line_no_1=`cat -n /home/user1/test.txt| grep 1.node|grep topon.S1| awk '{print $1}'` #ищу номер строки
weight_1=`cat -n /home/user1/test.txt| grep 1.node|grep topon.S1| awk '{print $6}'` #ищу значение в столбце
read new_weight_1
sed -i "${line_no_1}"'s/'$weight_1'/'$new_weight_1'/' /home/user1/test.txt
Пробовал менять строку на изменённую строку - тоже не вышло.
number_line_no_1=`cat -n /home/user1/test.txt| grep 1.node|grep topon.S1 awk '{print $1}'` #ищу номер строки
weight_1=`cat -n /home/user1/test.txt| grep 1.node|grep topon.S1| awk '{print $6}'` #ищу значение в столбце
line_no_1=`cat /home/user1/test.txt| grep 1.node|grep topon.S1` # записываю строку в
переменную
read new_weight_1
a=`cat /home/user1/test.txt| grep 1.node|grep topon.S1| awk '$5="'$new_weight_1'"'` #
строчка с изменеённым весом
sed -i "${number_line_no_1}"'s/'$line_no_1'/'$a'/' /home/user1/test.txt
Ответы (1 шт):
Автор решения: Arnaud Valmary
→ Ссылка
Возможно, вас заинтересует этот сценарий:
#! /bin/bash
FILENAME="./test.txt"
declare -i nNode=1
declare new_weight=
read -r new_weight
awk -v nNode="${nNode}" -v new_weight="${new_weight}" '
BEGIN {
# Разделитель выходных столбцов будет табуляцией
OFS="\t"
}
# Фильтр по значениям первого и последнего столбцов
$1 == (nNode ".node") && $7 == ("topon.S" nNode) {
# записать новое значение в столбец веса ...
$5 = new_weight
# ...и линия печати...
print
# ...и вычислить следующую строку
next
}
{
# переформатировать строку с помощью OFS...
$1 = $1
# ...и линия печати
print
}
' \
< "${FILENAME}" \
> "${FILENAME}.tmp"
mv "${FILENAME}.tmp" "${FILENAME}"
