当找到完全匹配时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
- 打印您需要
更改为$ 3列,2美元,5美元,你正在回答OP。 –
你是最棒的。我花了4个小时才找到这个。你可以解释为什么我的论点用for解析是不正确的。这不是和你一样吗? –
Thanks @MarcLambrichs,斑点! – janos