アルパカログ

Webエンジニア兼マネージャーがプログラミングやマネジメント、読んだ本のまとめを中心に書いてます。

shell コマンドを任意の引数で実行するxargsの便利な使い方

f:id:otoyo0122:20200929091500p:plain:w300

bashやzshなどのシェルにおいて、xargsコマンドは知ってると便利だけど知らない人にとってはよくわからないコマンドです。

このエントリでは、普段私がよく使うxargsコマンドの使い方を紹介します。

IDを任意の個数ごとにまとめる

大量のIDが行ごとに記載されたファイルがあるとします(説明のために30個にしています)。

$ wc -l ids.txt
    30 ids.txt

$ head -n 3 ids.txt
1
2
3

$ tail -n 3 ids.txt
28
29
30

これらのIDを、例えばCSV出力やAPIリクエストパラメータのために、10個ずつカンマ区切りにしたいとします。

そんなときはxargs -nを使うと便利です。

出力をxargs -n Nにパイプすると、N個の引数として指定したコマンドに渡すことができます。

# 指定した数の引数として任意のコマンドに渡せる
$ cat ids.txt | xargs -n 10 echo                     
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30

あとは、空白をカンマに置換してあげればOKです。

$ cat ids.txt | xargs -n 10 echo | sed -e 's/ /,/g'
1,2,3,4,5,6,7,8,9,10
11,12,13,14,15,16,17,18,19,20
21,22,23,24,25,26,27,28,29,30