当找到完全匹配时awk打印确切字段

问题描述:

我有一个包含信息的persons.dat文件。当找到完全匹配时awk打印确切字段

下面是一个示例行。

1129|Lepland|Carmen|female|1984-02-18|228T04:39:58.781+0000|81.25.252.111|Internet Explorer 

1129是ID。

我被要求根据他们的ID,特别是他们的名字(卡门),(姓氏= Lepland)和出生日期(1984-02-18)以空格分隔显示任何人的信息。

我已经存储在壳可变IDNumber中的ID,如下所示:

for arg1 in [email protected];do # Retrieve ID Number 
if [ $1 = "-id" ];then 
     IDNumber="$2" 
fi 
shift 
done 

如何使用AWK显示一个ID的确切字段?

因为不使用arg1,所以shell脚本的命令行参数解析有点混乱。 并且即使在它找到-id并将$2指定为IDNumber, ,迭代仍在继续。 例如,当参数是-id 3, 之后IDNumber=3, 迭代继续时,检查if [ 3 = "-id" ]。 另外,if [ $1 = ... ]中的"$1"应该用双引号, ,否则如果存在空参数,脚本将会崩溃。

下面就来解决这些问题的一种方式:

while [ $# -gt 0 ]; do 
    if [ "$1" = -id ]; then 
     id=$2 
    fi 
    shift 
done 

然后你可以使用id使用awk这样的:

awk -F'|' -v id="$id" '$1 == id {print $3, $2, $5}' persons.dat 

即:

  • 设置|作为现场分离器
  • Set id变量awk来的$id在外壳
  • 值查找输入记录,其中第一场($1)等于id
  • 打印您需要
+0

更改为$ 3列,2美元,5美元,你正在回答OP。 –

+0

你是最棒的。我花了4个小时才找到这个。你可以解释为什么我的论点用for解析是不正确的。这不是和你一样吗? –

+0

Thanks @MarcLambrichs,斑点! – janos