xargsでechoまたはprintfを使用してファイルのリストを繰り返す方法は?

xargsでechoまたはprintfを使用してファイルのリストを繰り返す方法は?

存在する遊ぶそして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$ 

しかし、上記の各数字を別々の行に配置する方法がわかりません。

また見なさい:

配列をファイルとして印刷し、配列の各要素を bash の新しい行に入れます。

xargsにリスト/配列をエコーし​​ます。

ベストアンサー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

上記のコードはprintf3回実行され、毎回ファイルとは別の行で実行されます。ユーティリティ引数リストの各引数は、{}ファイルから読み込まれた行に置き換えられます。

ファイルに以下が含まれている場合引用符付き文字列:

'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'

おすすめ記事