2012-06-27 20 views

Respuesta

7

Primero, su función solo usa 1 argumento, entonces usar xargs aquí solo tomará la primera arg. Es necesario cambiar la función a la siguiente:

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

Para obtener xargs utilizar una función de su bashrc, debe generar una nueva consola interactiva. Algo como esto puede funcionar:

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

Puesto que ya está en función de la división de palabras, sólo podía guardar salida de awk en una matriz.

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

O bien, puede utilizar printf de awk:

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

Para toda la solución awk no se convierte correctamente. Los números se imprimen como sus dígitos, mientras que las letras se convierten a '0'. Estoy buscando convertir valores ASCII en enteros. – lonestar21

+2

O puede exportar la función ('export -f') y * not * make the shell interactive. –

0

En el caso trivial, puede utilizar /usr/bin/printf:

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