[英]Declaring an awk function in bash
我有一個awk腳本,它被調用:
awk -f myawkfile.awk arguments
使用相同的提到的調用將awk腳本調用到我的bash腳本中。
我可以而不是調用awk腳本將其聲明為我的bash腳本中的函數。 我認為通過在前面和后面寫一個awk
來勾選整個代碼然后分配一個函數名來隨意調用它會很容易。 不知怎的,它沒有做到這一點。
我試圖這樣做是因為我不希望我的腳本依賴於另一個腳本。 我不是那個寫awk
腳本的人。 它需要一個文件作為輸入,做一些東西並返回我腳本中使用的修改過的文件。
使用heredoc表示法可以寫出這樣的東西
#!/bin/bash
awk_program=$(cat << 'EOF'
/* your awk script goes here */
EOF
)
# ...
# run awk script
awk "$awk_program" arguments
# ...
只需在函數中編寫awk腳本:
#!/bin/sh -e
foo() { awk '{print $2}' "$@"; }
foo a b # Print the 2nd column from files a and b
printf 'a b c\nd e f\n' | foo # print 'b\ne\n'
請注意,如果將空字符串作為參數傳遞,則awk標准在行為上似乎不明確,但shell保證"$@"
擴展為零字段而不是空字符串,因此如果您使用以下方法調用foo
,則只會出現問題空論點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.