Linux
awk + perl + 在 awk 語法中獲取兩個參數
請告知我的 awk 語法有什麼問題以及如何修復它(此語法在我的 ksh 腳本中),我在 linux 機器上執行我的腳本
我的目標是從 file.txt 中僅獲取日期之間的行:
從 2012 年 4 月 19 日至 2012 年 4 月 22 日
備註 - 其他解決方案可以使用 perl
[root@test1 /var/tmp]# a='2012/04/19' [root@test1 /var/tmp]# b='2012/04/22' [root@test1 /var/tmp]# awk -v A=$a -v B=$b '/A/,/B/' file.txt awk: syntax error near line 1 awk: bailing out near line 1
文件.txt
[ 2012/04/18 21:49:01:857 ] Monitor::handle_client_message(): [ 2012/04/18 21:50:02:379 ] Monitor::handle_client_message( [ 2012/04/18 21:57:52:64 ] Monitor::handle_client_message(): [ 2012/04/18 21:57:52:252 ] Monitor::handle_client_message( [ 2012/04/18 21:58:46:958 ] Monitor::handle_client_message(): [ 2012/04/19 21:58:46:958 ] Monitor::handle_client_message(): [ 2012/04/20 21:58:46:958 ] Monitor::handle_client_message(): [ 2012/04/21 21:58:46:958 ] Monitor::handle_client_message(): [ 2012/04/22 21:58:46:958 ] Monitor::handle_client_message():
你可以使用這個命令:
$ awk '/2012\/04\/19/,/2012\/04\/22/' file.txt
如圖所示,您需要轉義斜線。
編輯:
可以使用以下變數來完成:
$ a='2012\/04\/19' $ b='2012\/04\/22' $ awk "/$a/,/$b/" file.txt [ 2012/04/19 21:58:46:958 ] Monitor::handle_client_message(): [ 2012/04/20 21:58:46:958 ] Monitor::handle_client_message(): [ 2012/04/21 21:58:46:958 ] Monitor::handle_client_message(): [ 2012/04/22 21:58:46:958 ] Monitor::handle_client_message():
編輯2:
轉義斜線可以使用 done
sed
命令,例如:$ a='2012/04/19' $ aa=$(echo $a | sed 's/\//\\\//g') $ echo $aa 2012\/04\/19
然後,您可以
aa
代替a
. 同樣,它可以為b
.