Как awk только в определенной строке и указать c столбец - PullRequest
1 голос
/ 19 марта 2020

Например, у меня есть следующий файл:

4:Oscar:Ferk:Florida
14:Steven:Pain:Texas
7:Maya:Ross:California

и так далее ... У него неизвестное количество строк, потому что вы можете продолжать добавлять к нему больше. Я пишу сценарий, в котором вы можете редактировать имя, указав идентификатор человека и новое имя, которое вы хотите указать в качестве параметров.

Я пытаюсь использовать awk, чтобы найти и затем измените имя в указанной строке c и обновите файл. У меня возникли проблемы, потому что мой код обновляет значение каждого столбца до указанного.

Мой текущий код:

getID=$1
getName=$2

awk -v varID="$getID" -F':' '$0~varID' file.dat | awk -v varName="$getName" -F':' '$2=varName' file.dat > tmp && mv tmp file.dat

Помощь действительно приветствуется, спасибо заранее.

1 Ответ

3 голосов
/ 19 марта 2020

Вы можете использовать этот awk:

getID=14          # change to getID="$1"
getName='John K'  # change to getName="$2"

awk -v id="$getID" -v name="$getName" 'BEGIN{FS=OFS=":"} $1==id{$2=name} 1' file

4:Oscar:Ferk:Florida
14:John K:Pain:Texas
7:Maya:Ross:California
...