簡體   English   中英

在bash中聲明awk函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM