2012-06-27 12 views

Odpowiedz

7

Po pierwsze, twoja funkcja używa tylko 1 argumentu, więc użycie xargs tutaj zajmie tylko pierwszy argument. Trzeba zmienić funkcję na następujące kwestie:

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

dostać xargs użyć funkcji z bashrc, należy zapoczątkować nową interaktywną powłokę. Coś jak to może działać:

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

Skoro już jesteś w zależności od podziału na słowa, można po prostu wyjście przechowaj awk w tablicy.

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

Albo można użyć awk za printf:

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

Dla wszystkich rozwiązań awk nie konwertuje poprawnie. Liczby są drukowane jako cyfry, a litery są konwertowane na "0". Szukam konwersji wartości ASCII na liczby całkowite. – lonestar21

+2

Albo możesz wyeksportować funkcję ('export -f') i * nie * sprawić, że powłoka będzie interaktywna. –

0

W trywialnym przypadku można użyć /usr/bin/printf:

xargs -I {} /usr/bin/printf '%d' "'{}" 
Powiązane problemy