awk 引用程式文本

awk 引用程式文本

我剛剛在 awk 中遇到了一個問題,我想知道是否有人可以向我解釋為什麼會發生這種情況。

如果我運行,以下兩行的行為會有所不同:

# grep -Rl BASE_DIR --exclude-dir=.svn * | awk -F "/" '{print $1}'

我(如預期)只得到包含 BASE_DIR 的檔案路徑的第一個目錄。

但是,如果我像這樣運行它:

# grep -Rl BASE_DIR --exclude-dir=.svn * | awk -F="/" "{print $1}"

編輯:

-F="/"並且-F "/"不會影響我的測試。第二個命令已更新以顯示這一點

正如格倫傑克曼在答案中所建議的那樣,我將命令更改為:

# grep -Rl BASE_DIR --exclude-dir=.svn * | awk -F "/" "{print $1}"

並且得到了完全相同的有缺陷的結果

編輯結束

我獲得了包含 BASE_DIR 的文件的完整路徑,我嘗試轉義程序文本,以防萬一"{print \$1}"這是問題所在,但我得到了相同的結果。

有人能告訴我這裡的問題是什麼嗎?

答案1

在第一個範例中,您正在執行以下操作:awk -F "/"
在下一個範例中,您正在執行下列操作:awk -F="/"

所以字段分隔符是不同的:您使用兩個字串=/作為字段分隔符


啊,我不知道為什麼我之前沒有看到這個:你使用了錯誤的引號:

# grep -Rl BASE_DIR --exclude-dir=.svn * | awk -F "/" "{print $1}"
------------------------------------------------------^

awk 程式兩邊的雙引號表示 shell 將會取代該變數$1 將程序交給 awk。在 shell 中很可能$1是空的,因此 awk 會看到:{print }

請改用單引號。

相關內容