jq
- безусловно, самое элегантное решение. С помощью awk
вы можете написать
awk -v id=1490 '
$1 == "\"id\":" && $2 == id"," {matched = 1}
$1 == "}," {matched = 0}
matched && $1 ~ /temperature|humidity/ {sub(/,/,"", $2); print $2}
' file
Использованиеsed
:
$ sed '2,$s/,/.1,/2' file
ip,time,name
1.1.1.1,2018-08-31 10:01:03.1,postgres
2.1.1.1,2018-08-31 12:51:13.1,oracle
3.1.1.1,2018-08-31 14:32:53.1,sql
Это применяет замену к строке 2 и далее(2,$
). Замена s/,/.1,/2
заменяет вторую запятую на .1,
. Именно /2
в конце команды подстановки заставляет ее перейти ко второму совпадению.
Используйте это:
awk -F, 'BEGIN{OFS=","} NR>1{$2=$2".1"}1' file
-F,
задает разделитель полей ввода BEGIN{OFS=","}
задает разделитель полей вывода NR>1{$2=$2".1"}
добавляет .1
, если номер строки больше 0, ко второму полю