我有一些日誌稱爲ts.log看起來像shell腳本變量傳遞給AWK,需要雙引號保存
[957670][DEBUG:2016-11-30 16:49:17,968:com.ibatis.common.logging.log4j.Log4jImpl.debug(Log4jImpl.java:26)]{pstm-9805256} Parameters: []
[957670][DEBUG:2016-11-30 16:49:17,968:com.ibatis.common.logging.log4j.Log4jImpl.debug(Log4jImpl.java:26)]{pstm-9805256} Types: []
[957670][DEBUG:2016-11-30 16:50:17,969:com.ibatis.common.logging.log4j.Log4jImpl.debug(Log4jImpl.java:26)]{rset-9805257} ResultSet
[957670][DEBUG:2016-11-30 16:51:17,969:com.ibatis.common.logging.log4j.Log4jImpl.debug(Log4jImpl.java:26)]{rset-9805257} Header: [LAST_INSERT_ID()]
[957670][DEBUG:2016-11-30 16:52:17,969:com.ibatis.common.logging.log4j.Log4jImpl.debug(Log4jImpl.java:26)]{rset-9805257} Result: [731747]
[065417][DEBUG:2016-11-30 16:53:17,986:sdk.protocol.process.InitProcessor.process(InitProcessor.java:61)]query String=requestid=10547
我有一個劇本,其中有像
#!/bin/bash
begin=$1
cat ts.log | awk -F '[ ,]' '{if($2 ~/^[0-2][0-9]:[0-6][0-9]:[0-6][0-9]&& $2>="16:50:17"){print $0}}'
,而不是某事輸入時間如16:50:17我只想把$ 1的shell傳給awk,這樣我所需要做的就是./script time:hh:mm:ss腳本看起來像
#!/bin/bash
begin=$1
cat ts.log | awk -v var=$begin -F '[ ,]' '{if($2 ~/^[0-2][0-9]:[0-6][0-9]:[0-6][0-9]&& $2>="var"){print $0}}'
但雙引號需要在那裏,否則它將無法正常工作。 我試過2>「\」「var」\「」 但它不起作用。 那麼有沒有辦法在那裏保留雙引號? 首選結果./script 然後從指定爲$ 1的時間提取日誌。
什麼是'\ 1'和'\ 2'做的事情?注意你可以省略'{print $ 0}'並直接說'awk -F'[,]'-v var =「16:50:17」'$ 2> var'file'來打印第二個字段大於在'var'中給出。 – fedorqui
另外變量名不需要以'$'爲前綴 – nu11p01n73R
@EdMorton雙引號用於比較日期,否則它將不起作用。所以如果我手動插入時間像貓ts.log | awk -v var = $ begin -F'[,]''{if($ 2〜/^[0-2] [0-9]:[0-6] [0-9]:[0-6] [ 0-9] && $ 2> =「16:50:17」){print $ 0}}',它會從16:50:17中提取日誌,但沒有雙引號,它會打印整個日誌。所以我的問題是,如果有一種方法可以將雙引號保留在那裏,而我可以將變量$ 1的shell傳遞給awk。 –