Изменить значения в двух разных строках с помощью awk - PullRequest
1 голос
/ 16 января 2020

У меня исправлена ​​карта параметров. Мне нужно изменить значение строк 10 и 20, я пытаюсь использовать awk, но пока не получил его. Эти позиции фиксированы, поэтому мне нужно будет сделать это с помощью al oop, но это будут всегда те же 2 строки, строки 10 и 20. Я пробовал таким образом, но он меняет $ 1 всех строк с 10 на 20. Так как Я буду изменять эти значения. Я не могу использовать sed для сопоставления с шаблоном, потому что у меня его не будет, значения будут случайными каждый раз, только фиксированные строки.

awk 'FNR==10,FNR==20{$1="new_value"}1' dummycard.txt > dummynew.txt  

Это мой файл:

DATAFILE
p365.txt
TRAITS
2
FIELDS_PASSED TO OUTPUT

WEIGHT(S)

RESIDUAL_VARIANCE
300
EFFECT
3 cross numer
EFFECT
1 cross numer
RANDOM
animal
FILE
pednem.txt
(CO)VARIANCES
200
OPTION conv_crit 1d-12
Convergence criterion (default 1d-10).
OPTION maxrounds 10000
maximum rounds (default 5000).

1 Ответ

2 голосов
/ 16 января 2020

Вы должны указать условие ИЛИ для проверки FNR.

awk 'FNR==10 || FNR==20{$1="new_value"}1' Input_file

ИЛИ согласно совету Эда сэра, вы можете попробовать:

awk 'FNR ~ /^[12]0$/{$1="new_value"}1' Input_file


В случае, если вы хотите получить новое значение в переменной awk, затем попробуйте выполнить следующее.

awk -v new_value="10" 'FNR==10 || FNR==20{$1=new_value}1' Input_file

Например, я установил его значение равным 10, вы можете установить его в соответствии со своими потребностями.

Почему код OP не работал: Поскольку OP использует , между номерами строк, поэтому он принимается как диапазон, поэтому все строки изменились с номеров строк на 10 до 20.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...