Usando o shell script para extrair dados com base na entrada do usuário [closed]

1
eid|location|desg|status
001|india|hr|active
002|delhi|marketing|inactive
003|hyderabad|sales|active
004|Bangalore|admin|inactive

Os dados estão no formato acima, o delimitador é '|' O prompt deve pedir o eid e exibir o status como ativo ou inativo.

please enter eid: 001
status is : active
    
por vijay raju 19.04.2017 / 13:59

2 respostas

3

Você pode usar read e sed

read -p "enter an eid: "; sed -n "/$REPLY/ s/.*|\(.*\)/status: /p" file

Notas

  • /$REPLY/ encontra uma linha com a entrada do usuário
  • -n apenas imprime as linhas que pedimos
  • s/old/new replace old com new
  • |\(.*\) salva todos os caracteres após o último | para referência posterior com
  • p imprime a linha modificada

Para consultar o arquivo mais recente:

#!/bin/bash
for f in *; do
  if [[ "$f" -nt "$newest" ]]; then
    "$f"="$newest"
  fi
done
read -p "enter an eid: "
sed -n "/$REPLY/ s/.*|\(.*\)/status: /p" "$newest"

Agradecemos a @terdon por me encontrar esta página - porque sabemos que ls -t | head -n 1 não está correto

    
por 19.04.2017 / 14:37
3

Isso faz a análise em sh :

printf 'Enter eid: ' >&2
read query

while IFS="|" read eid location desg status; do
   if [ "$eid" = "$query" ]; then
      printf 'Status is "%s"\n' "$status"
      break
   fi
done <data.in

Isto supõe que o seu arquivo de dados é chamado data.in .

    
por 19.04.2017 / 14:45