Не могли бы вы попробовать один раз. Преимущество такого подхода в том, что я не являюсь жестким полем для целей. Эта программа будет искать поле заголовка там, где присутствует цель (например, -> 4-е или 5-е поле), оно будет изменяться только для этого конкретного столбца.
1-е решение: Если вам нужно внести изменения во все вхождения имени игрока, используйте следующее.
NewGoals=10
awk -v newgoals="$NewGoals" 'BEGIN{FS=OFS=":"} FNR==1{for(i=1;i<=NF;i++){if($i=="Goals"){field=i}}} FNR>1{if($1=="Salah"){$field=newgoals}} 1' Input_file
2-е решение: Если вы хотите изменить значение цели конкретного игрока только на конкретную строку, то попробуйте выполнить следующее.
NewGoals=10
awk -v newgoals="$NewGoals" 'BEGIN{FS=OFS=":"} FNR==1{for(i=1;i<=NF;i++){if($i=="Goals"){field=i}}} FNR>1{if($1=="Salah" && FNR==2){$field=newgoals}} 1' Input_file
Выше будут вноситься изменения только для строки 2, вы можете изменить ее, изменив FNR==2
во втором условии, где FNR ссылается на номер строки в awk
. Если вы хотите сохранить вывод в сам файл Input_file, вы можете добавить > temp_file && mv temp_file Input_file
к вышеуказанным кодам.