Edite o valor na tabela

0

É necessário definir uma função que receba um nome de usuário, um local na tabela e o novo valor a ser definido. o conjunto de tabelas é

user:value1:value2:value3

Percebo como posso fazer a substituição usando awk '{gsub... , mas não tenho ideia de como especificá-lo em um usuário específico.

    
por Itay Gurvich 04.12.2016 / 05:05

1 resposta

3

Primeiro, se o arquivo em questão for /etc/passwd , NÃO use essa solução; use usermod .

Digamos que você queira converter o terceiro campo em newvalue2 para user007 . Você poderia fazer assim:

awk -F: -v OFS=: '$1 == "user007" {$3 = "newvalue2"} {print}' inputfile > outputfile

Se você quer definir especificamente uma função de shell para fazer isso, você pode (embora eu pessoalmente não me incomode.)

myfunc() {
  [ "$#" -eq 2 ] ||
    { printf '%s\n' 'Usage: myfunc <USER> <GPA>' 'Assigns given GPA to USER (in column 5 of "~/students.dat")'
      return 1;}

  local mytempfile
  mytempfile="$(mktemp)"

  awk -F: -v OFS=: -v user="$1" -v gpa="$2" '$1 == user {$5 = gpa} {print}' ~/students.dat > "$mytempfile" &&
    mv "$mytempfile" ~/students.dat
}

No entanto, isso NÃO é algo que eu faria para os dados REAL, apenas para dados temporários ou de "brinquedo" sem uso para ninguém além de mim. É muito mais frágil do que deveria ser. Os CSVs não são substitutos para um banco de dados adequado.

Se você optar por uma solução baseada em CSV, no mínimo certifique-se de ter backups regulares e MUITO melhor verificação de erros do que mostrado acima; por exemplo, você pode querer verificar a validade do nome de "usuário" fornecido ou lançar um erro se o usuário não for encontrado no arquivo CSV, ou fazer verificações de integridade de dados - como verificação de intervalo - no GPA fornecido. Mas todas essas coisas seriam melhor feitas com um banco de dados real.

Você pode configurar uma sandbox do PostgreSQL com muita facilidade e comece a brincar com ele para aprender mais sobre bancos de dados reais e o que você pode fazer com eles.

    
por 04.12.2016 / 05:08

Tags