2012-06-27 19 views
10

我在我的.bashrc這個自定義函數:使用xargs的用戶定義的bash函數

function ord() { 
    printf '%d' "'$1" 
} 

我要如何與xargs的使用這個功能:

cat anyFile.txt | awk '{split($0,a,""); for (i=1; i<=100; i++) print a[i]}' | xargs -i ord {} 
xargs: ord: No such file or directory 
+0

這是爲什麼越來越downvoted? – lonestar21

+0

也許是UUOC?我不是downvoter – jordanm

回答

7

首先,你的函數只使用1個參數,所以在這裏使用xargs只會取第一個參數。你需要的功能更改爲以下:

ord() { 
    printf '%d' "[email protected]" 
} 

要獲得xargs的使用功能,從你的.bashrc,您必須生成一個新的交互的shell。這樣的事情可能工作:

awk '{split($0,a,""); for (i=1; i<=100; i++) print a[i]}' anyFile.txt | xargs bash -i -c 'ord [email protected]' _ 

既然你已經根據分詞,你可以只商店awk的陣列中的輸出。

arr=(awk '{split($0,a,""); for (i=1; i<=100; i++) print a[i]}' anyFile.txt) 
ord "${arr[@]}" 

或者,您可以用awk的printf:

awk '{split($0,a,""); for (i=1; i<=100; i++) printf("%d",a[i])}' anyFile.txt 
+0

對於所有的awk解決方案,它不能正確轉換。數字被打印爲數字,而字母被轉換爲'0'。我正在尋找將ASCII值轉換爲整數。 – lonestar21

+2

或者您可以導出函數('export -f'),*不*使shell交互。 –

0

在瑣碎的情況下,你可以使用/usr/bin/printf

xargs -I {} /usr/bin/printf '%d' "'{}"