私は .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
まず、関数は 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
些細なケースでは、次を使用できます/usr/bin/printf
。
xargs -I {} /usr/bin/printf '%d' "'{}"