我想使用awk從文件中提取文本,它基本上可以正常工作,但我希望使用變量爲dymamical查找模式。AWK - 從SHELL模式輸入變量
應該如何工作的:
文件test_input包含(順便說一句:從HP DP提取omnimm -show_locked_devs
)
Type: Device
Name/Id: Drive1
Pid: 28405
Host: Host1
Type: Cartridge
Name/Id: Lib1
Pid: 28405
Host: Host1
Location: 47
...
- 得到DRIVE1 => find命令模式 「PID」 號(DRIVE1)和從文件test_input(28405)
cat test_input | awk 'c&&!--c;/Drive1/{c=1}'| awk '{print $2}' 28405
- GET「位置」編號=>找到所有的「PID」 numberes並顯示下一個2線(記錄)對於每個匹配,則使用濾波器「位置」的grep從輸出並顯示第二字段(47)
cat test_input | awk 'c&&!--c;/28405/{c=2; print $0}'| grep Location | awk '{print $2}' 47
我注意到AWK中的雙引號可以處理SHELL變量,但是當我在腳本中使用SAME命令時,我收到錯誤消息「awk:語句無法正確解析。
DRIVE=Drive1;cat test_input | awk "c&&!--c;/$DRIVE/{c=1}" | awk '{print $2}' 28405
如果你有一些提示如何從SHELL得到工作變量,請讓我知道。 我也知道,我的命令和重定向很可能複雜,但耶我不是腳本大師:)
PLS。不要使用'cat file | awk ...',應該是'awk''文件'。而且在管道中使用多個'awk'和'grep'通常可以簡化爲一個'awk'。 – TrueY 2014-11-06 09:37:36
似乎是這樣的:[如何在awk腳本中使用shell變量](http://stackoverflow.com/q/19075671/1983854) – fedorqui 2014-11-06 09:39:49
這樣做而不是'cat <<<「$(更多文件)」> STDOUT 1 >&2 | awk' – 2014-11-06 09:41:24