
存在する遊ぶそしてxargs
以下のように
nicholas@gondor:~/x$
nicholas@gondor:~/x$ xargs echo < list.txt
1 2 3
nicholas@gondor:~/x$
nicholas@gondor:~/x$ cat list.txt
1
2
3
nicholas@gondor:~/x$
xargs
次の出力をどのように提供できますか?
number is 1
number is 2
number is 3
そして、現在の結果の数だけではありませんか?
echoでシンボルを使ってみましたが、$
正しい出力が得られませんでした。
また試しました:
nicholas@gondor:~/x$
nicholas@gondor:~/x$ printf '%s\n' "${list.txt[@]}" | xargs
bash: ${list.txt[@]}: bad substitution
nicholas@gondor:~/x$
しかし、これは明らかにファイルを正しく読み取ることができません。
あまり困惑していない場合は、引き続きecho
使用することをお勧めします。printf
もう一つの試み:
nicholas@gondor:~/x$
nicholas@gondor:~/x$ xargs echo 'numbers are ${}' < list.txt
numbers are ${} 1 2 3
nicholas@gondor:~/x$
しかし、上記の各数字を別々の行に配置する方法がわかりません。
また見なさい:
答え1
$ xargs printf 'Number is %d\n' <file
Number is 1
Number is 2
Number is 3
これはファイルから単語を読み取り、一度にできるだけ多くの単語で指定されたユーティリティを呼び出します。ユーティリティprintf
は、各パラメータセットに対してフォーマット文字列を再利用します。
上記は最終的に実行されます。
printf 'Number is %d\n' 1 2 3
ファイルの行にスペースまたはタブがある場合:
$ cat file
1 2
3 4
5 6
$ xargs printf 'Number is %s\n' <file
Number is 1
Number is 2
Number is 3
Number is 4
Number is 5
Number is 6
上記は、ファイル内のスペースで区切られたすべての単語を使用してユーティリティを実行した結果ですprintf
。
printf 'Number is %s\n' 1 2 3 4 5 6
$ xargs -I {} printf 'Number is %s\n' {} <file
Number is 1 2
Number is 3 4
Number is 5 6
上記のコードはprintf
3回実行され、毎回ファイルとは別の行で実行されます。ユーティリティ引数リストの各引数は、{}
ファイルから読み込まれた行に置き換えられます。
ファイルに以下が含まれている場合引用符付き文字列:
'1 2'
'3 4'
'5 6'
それから:
$ xargs printf 'Number is %s\n' <file
Number is 1 2
Number is 3 4
Number is 5 6
上記はその項目を実行した結果です。
printf 'Number is %s\n' '1 2' '3 4' '5 6'