一般使用awk,

參考資料大多是提到用pipeline 把一行文字當輸入,

用-F 取得各欄位的值,

(這是awk的強項, 當然都會圍繞在這些用法上啊!)

很少會提到要怎樣把bash的變數傳進去.

說穿了就是awk -v var=value 而已.

男人也有提到, 只是在查詢時只想到"input parameter", "pipeline" 這幾個關鍵字,

卻壓根沒想到要用"var"搜尋.

 

最簡單的用法

awk -v var_in_awk=${VAR_IN_BASH} ' { print var_in_awk } '

記得${VAR_IN_BASH}不能用小括號()代替.

 

實際的用法, 列出"2011-08"以前的檔案:

#!/bin/bash

ROOT_DIR=$1

MONTH_AGO="2011-08"

 

find $ROOT_DIR -type f |

sed 's/^/ls -l /g' |

sh |

awk -v month_ago=${MONTH_AGO} '{ if ( $6 <= month_ago ) { print $8 } }'

# $6是"ls -l" 輸出的檔案日期(第六欄位), $8是 "ls -l" 的檔名 第八欄位

 

搞了一天才從stackoverflow問到答案,

書到用時方恨少!!!

arrow
arrow
    全站熱搜

    Orion 發表在 痞客邦 留言(0) 人氣()