使用 shell 脚本根据用户输入提取数据

使用 shell 脚本根据用户输入提取数据
eid|location|desg|status
001|india|hr|active
002|delhi|marketing|inactive
003|hyderabad|sales|active
004|Bangalore|admin|inactive

数据格式如上,分隔符为“|”提示应询问 eid 并显示状态为活动或非活动。

please enter eid: 001
status is : active

答案1

你可以使用readsed

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

笔记

  • /$REPLY/查找包含用户输入的行
  • -n只打印我们要求的行
  • s/old/newold用。。。来代替new
  • |\(.*\)保存最后一个字符之后的所有字符|以供稍后参考\1
  • p打印修改后的行

查询最新文件:

#!/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: \1/p" "$newest"

归功于@特登为了找到我这一页- 因为我们知道ls -t | head -n 1这样不行

答案2

这会进行解析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

这是假设您的数据文件名为data.in.

相关内容