файл csv и awk: изменить запись во втором столбце, если первый столбец совпадает, затем распечатать полный файл

chcon -R -t httpd_sys_content_t <Your_Document_Root_Dir>

Должно сработать

2
09.04.2020, 15:48
2 ответа

Единственная модификация, которую я считаю необходимой, заключается в том, что у вас есть оператор printв разделе END, но отсутствует один для строк, не соответствующих -. Вместо этого вам следует

awk -F';' -v OFS=';' -v acc='bla' -v newpw='etewtw' '$1 == acc {$2=newpw}1' file.csv

т.е. просто заменить поле Nr. 2 с новым паролем, и в общем случае напечатайте (возможно измененную )строку (сокращенное обозначение для которой1). При этом мне также удалось изменить запись в последней строке.

Кроме того, было бы разумно сделать ваше условие точным соответствием вместо регулярного выражения, вы никогда не знаете, может ли одно имя учетной записи содержать строку, совпадающую с именем другой учетной записи (, как в adminи webadmin, например ).

4
28.04.2021, 23:18

Любой из них необходим, чтобы ваше имя и пароль обрабатывались как буквальные строки:

acc='bla' newpw='etewtw' awk '
    BEGIN{FS=OFS=";"; acc=ENVIRON["acc"]; newpw=ENVIRON["newpw"]}
    $1 == acc{$2=newpw} 1
' file.csv

awk '
    BEGIN{FS=OFS=";"; acc=ARGV[1]; newpw=ARGV[2]; ARGV[1]=ARGV[2]=""}
    $1 == acc{$2=newpw} 1
' 'bla' 'etewtw' file.csv

Этот подход необходим вам, потому что переменные, переданные с помощью -v, расширяют escape-последовательности. Итак, если какая-либо из переменных, которые вы передаете, содержит обратную косую черту, например foo\tbar, то \tв середине будет развернута и обработана как буквальный символ табуляции.

Для получения дополнительной информации см.http://cfajohnson.com/shell/cus-faq-2.html#Q24и/или https://stackoverflow.com/questions/19075671/how-do-i-use-shell-variables-in-an-awk-script.

6
28.04.2021, 23:18

Теги

Похожие вопросы