2014-10-19 62 views
1

用戶輸入我知道ARGV [I]可用於存儲用戶輸入。但是,我想在awk腳本中使用它,並讓ARGV [i]比較來自其他文本文件的字段。如果ARGV [i]匹配字段或者字段包含用戶輸入的ARGV [i],那麼我想返回該行的其他字段。 讓說我有一個文件,testing.txt使用ARGV來獲得awk腳本

123123123:Walter White:1:2:3:4 
123123124:Jesse Pinkman:1:3:4:1 

這是我的awk腳本,awkScript.awk

#!/usr/bin/awk -f 
    BEGIN{FS = ":"; print "ENTER A NAME: "} 
    { 
     for (i = 1; i < ARGC; i++) 
     { 
      if ($2 ~ /'ARGV[i]'/) 
      { 
       print "Member ID: " $1 
      } 
     } 
    } 

它只是打印輸入一個名稱:當我執行該腳本文件。它甚至沒有得到用戶的輸入。

+1

'ARGV'不能用於交互式的東西。它是shell將完整的命令行交給程序,也就是你在'/ proc/PID/cmdline'下找到的。在你的情況下,它看起來像'你的程序'Walter White'datafile'。 如果你想獲得用戶輸入,你可以看看[這個問題] [1]。 [1]:http://stackoverflow.com/questions/12907238/get-the-user-input-in-awk – joepd 2014-10-19 09:45:23

+1

這將更適合純粹的* nix解決方案。 – 2014-10-20 07:12:04

回答

0

從AWK手冊

ARGV is an array of command line arguments 

也就是說,同時調用AWK sript傳遞的參數列表。

你可能要像

$echo 'ENTER A NAME' 
    $read Name 
    Jesse Pinkman 
    $awk -v name="$Name" -F: '$2=name{print $1}' filename 
    123123123 
    123123124 

這裏-v選項創建一個名爲name在awk腳本變量並給從外殼$Name變量的值來命名

$2=name{print $1}$2=name選擇其中$2所有線路是name並打印第一列

+0

'/ $ 2 = name/$ 2 == name' – 2014-10-20 18:37:42

0

不知道你在想什麼WRT使用ARGV [],但這裏有一種方法可以在awk中做你想做的事情:

$ awk 'BEGIN{FS=":"; msg="ENTER A NAME:"; print msg} NR==FNR{a[$2]=$0; next} $0 in a{print a[$0]} {print msg}' file - 
ENTER A NAME: 
Jesse Pinkman 
123123124:Jesse Pinkman:1:3:4:1 
ENTER A NAME: 
Walter White 
123123123:Walter White:1:2:3:4 
ENTER A NAME: