2012-12-13 109 views
2

遇到问题awk。基本上我想要做的是在文件中搜索这个特定的字符串。然后打印该行的第三个元素。使用awk的shell脚本

这里就是我所做的:

awk -F'/' '$1=="$log"{print $3}' schedlist 

出于某种原因,这是行不通的,但如果我这样做:

awk -F'/' '$1=="20121213-20:58:53"{print $3}' schedlist 

代码工作。但是我需要让用户输入log的名字。

回答

2

您有几种选择。使用一个变量(或者与-v或简称为任务,但不能命名为“日志”,因为这是一个awk功能):

awk -F'/' '$1 == s {print $3}' s="$log" schedlist 

报价脚本不同:

awk -F'/' '$1 == "'"$log"'" { print $3}' schedlist 
+0

非常感谢!这样做的工作! (Y) –

3

您需要使用-v选项shell变量传递到awk,像这样:

awk -v tstamp="$log" -F'/' '$1==tstamp{print $3}' schedlist 

(更新变量名称为在评论中提到的)tstamp(因为log冲突与AWK内置功能log。)

+0

嗯我已经试过了,我得到这个错误:awk:运行时错误:不能命令行分配到日志 \t类型冲突或关键字 \t FILENAME =“”FNR = 0 NR = 0 –

+0

+1为正确的答案,但不幸的是你选择了一个与内建函数名称“log”冲突的变量名称!只需将变量名称更改为tstamp或其他内容:'awk -v tstamp =“$ log”-F'/''$ 1 == tstamp {print $ 3}'schedlist' –