2013-01-04 87 views
0

嘗試將變量傳遞到AWK從用戶輸入:傳遞bash的輸入變量的awk

是否嘗試過的awk -v的變化有錯誤,說明「AWK:無效-v選項」,即使選項中列出man文件。

#! /bin/bash 
read -p "Enter ClassID:" CLASS 
read -p "Enter FacultyName:" FACULTY 


awk '/FacultyName/ {print}' data-new.csv > $FACULTY.csv 
awk -vclass=${CLASS} '/class/ {print}' data-new.csv >> $FACULTY.csv 


echo Class is $CLASS 
echo Faculty member is $FACULTY 
+0

嘗試刪除空間在'#!/bin/bash' –

+0

檢查此:http://theunixshell.blogspot.com/2013/01/passing-bash-variable-to-awk.html – Vijay

+0

可能的重複[使用awk與變量](http:// stackoverflow .com/questions/6373379/using-awk-with-variables) –

回答

7

AWK的一些版本需要-v和變量賦值之間的空間。另外,您應該將bash變量放在雙引號中,以防止shell在傳遞給awk之前進行不需要的分析(例如分詞,通配符擴展)。最後,awk /.../是一個常數正則表達式(即/class/將搜索字符串「class」,而不是變量「class」的值)。有了這一切修正,這裏的awk命令,我想會做你想要什麼:

awk -v class="${CLASS}" '$0 ~ class {print}' data-new.csv >> $FACULTY.csv 

現在,有你使用它來代替任何理由:

grep "$CLASS" data-new.csv >> $FACULTY.csv 
+0

謝謝Gordon,它很有效。我對用awk和bash進行編程非常新,對我來說學習曲線有點陡峭,但這有助於我的知識向前發展。 grep命令我有一些經驗,但是,我仍然不夠了解新手的方法,至少我想了解awk。感謝所有人回覆。 – user1947569

0

你的劇本是我也不清楚,但是這些所有的工作:

CLASS=ec123 
echo | awk -vclass=$CLASS '{print class}' 
echo | awk -vclass=${CLASS} '{print class}'