2017-10-08 54 views
2

我有一個包含信息的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的確切字段?

回答

1

因爲不使用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