10

私は .bashrc にこの自己定義関数を持っています:

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
4

2 に答える 2

8

まず、関数は 1 つの引数しか使用しないため、ここで xargs を使用すると最初の引数のみが使用されます。関数を次のように変更する必要があります。

ord() {
   printf '%d' "$@"
}

xargs で bashrc の関数を使用するには、新しいインタラクティブ シェルを生成する必要があります。このようなものがうまくいくかもしれません:

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

すでに単語分割に依存しているため、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
于 2012-06-27T19:05:29.923 に答える
0

些細なケースでは、次を使用できます/usr/bin/printf

xargs -I {} /usr/bin/printf '%d' "'{}"
于 2012-06-27T22:05:28.327 に答える