我想使用 AWK 腳本而不在終端中輸入 CSV 檔案,而是從我的代碼內部呼叫該檔案。
電流輸入端子:
./script.awk 檔案.csv
所需的輸入終端:
./script.awk
另一方面,這是我到目前為止所做的腳本:
#!/usr/bin/awk -f
BEGIN{print"Filtered Elements:"}
BEGIN{FS=","}
{ if ($8~/.*5.*/ && $2~/.*Sh.*/ && ($3~/.*i.*/ || $4~/.*s.*/)) { print } }
{ if ($3~/.*ra.*/ && $7~/.*18.*/ && $13~/.*r.*/) { print } }
{ if ($5~/.*7.*/ && $2~/.*l.*/ && ($4~/.*Fi.*/ || $12~/20.*/)) { print } }
} **file.csv**
我也嘗試這樣做:
#!/usr/bin/awk -f
BEGIN{print"Filtered Elements:"}
BEGIN{FS=","}
BEGIN{
while (getline < file.csv > 0) {
{ if ($8~/.*5.*/ && $2~/.*Sh.*/ && ($3~/.*i.*/ || $4~/.*s.*/)) { print } }
{ if ($3~/.*ra.*/ && $7~/.*18.*/ && $13~/.*r.*/) { print } }
{ if ($5~/.*7.*/ && $2~/.*l.*/ && ($4~/.*Fi.*/ || $12~/20.*/)) { print } }
}
但無論哪種方式都發生了錯誤。先感謝您!
uj5u.com熱心網友回復:
您的第二個示例是一個正確的getline回圈,除了應該參考檔案路徑以將其視為字串(而不是變數):while (getline < "file.csv" > 0) #...。
或者,您可以通過在塊中操作ARGV和來設定腳本引數(包括輸入檔案和變數):ARGCBEGIN
BEGIN {
ARGV[1] = "file.csv"
ARGC = 2
}
{
# commands here process file.csv as normal
}
運行它就像./script使用 shell 設定引數一樣(如./script file.csv)。
uj5u.com熱心網友回復:
awk 腳本不是您呼叫的命令,而是由您呼叫的命令的awk位置解釋的一組指令awk。您顯然想要做的是撰寫一個 Unix 命令,該命令作為 shell 腳本實作,其中包括對 awk 的呼叫,例如:
#!/usr/bin/env bash
awk '
{ print "foo", $0 }
' 'file.csv'
將其存盤在一個名為stuff(不是stuff.awk或stuff.sh帶有后綴的任何其他檔案)中,然后將其稱為./stuff或僅stuff當當前目錄在您的PATH.
盡管您在技術上可以使用 shebang 直接呼叫 awk,但不要這樣做 - 請參閱https://stackoverflow.com/a/61002754/1745001。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/397995.html
