xargs についてのメモ
xargs の使い方毎回忘れるので、備忘。
xargs の一般的な話は他で。
実行されるコマンドだけを列挙
xargs を利用した際に発行されるコマンドだけを列挙させるには、 -p オプションを使って、
cut -f 5 data2|tail -10|xargs -n 1 -I {} -p ./bcrypt.mac --password={} ./bcrypt.mac --password=kdsjfkldsjfkdsj?... ./bcrypt.mac --password=kdsfjdkfjkd?...
のようにする。で、実行させる場合、-p オプションを除去して、
cut -f 5 data2|tail -10|xargs -n 1 -I {} ./bcrypt.mac --password={} $2a$10$VEA5caueTtvClPJvX3zdXuONc32pPGlPGEstkbxmpFnWIWH40WGau $2a$10$bkPOHB3laLV9rnxERIaeneYKfDog28yPx0TilZZusedPGdbfSrH2W
のようにする。上記の例だと、bcrypt.mac コマンドの実行結果だけが出ている。
コマンド呼び出し頻度の変更
何も指定しない場合、
cut -f 5 data2|tail | xargs echo kasjfd asdfkjfdfd sdkfjdkfjd
こういう感じ。どうしてこうなるかというと、
cut -f 5 data2|tail | xargs -p echo echo kasjfd asdfkjfdfd sdkfjdkfjd?...
のように処理されるから。もっと量が多い場合は、echo が2回以上呼ばれる場合もある。
毎回 echo を呼びたい場合、
cut -f 5 data2|tail | xargs -p -n 1 echo echo kdsjfkeiasdfdaf?... echo akksjfkdfjdkjf?... echo kjfkdfjdkfdf?...
とする。
引数の場所を指定する
上記までのやり方だと引数は常に最後につく。場所を find コマンドのように指定したい場合、
cut -f 5 data2|tail -10|xargs -n 1 -I {} -p ./bcrypt.mac --password={} ./bcrypt.mac --password=ksjfkdjdkfj?... ./bcrypt.mac --password=kdjfdkjfdkjfd?... ./bcrypt.mac --password=kjfdkjfdkddd?...
のようにする。
さらに凝ったことがやりたい時は
cut -f 5 data2|tail -10|perl -nle '$a=`./bcrypt.mac --password=$_`;chomp($a);print "$_:$a"' asfdsfd:$2a$10$q9B5Nthx7AqliBzY7vQdruekrDNHbw6HyVlpH9JcyjIO2Cn5.ITVq asfdsfdfd:$2a$10$6p7SKXrJ3M.s8Z/r4u7rwe66gIyAZri3pdDz8dpex3EyrcbfpZpu6 asdfdsfdsdd:$2a$10$6Q4wlJkINHxjJAKg6ztOOOE1.vUZcqN7b2h6ZQ9DTK7NwATGmj18q
cut -f 2,5 data2|tail -10|perl -nle 'chomp;@a=split;$b=`./bcrypt.mac --password=$a[1]`;chomp($b);print "$a[0]:$a[1]:$b"' Aさん:mcvcivc:$2a$10$x84wWkAVyFO2ppjM1ltTau9rI7XViUkbjldqhxlb6UCo99ctnyAKW Bさん:jckjfeiedf:$2a$10$KSz0GIl5whWhRs2e9sS9AOt7DkrJOHB9lJ6iFbdgWMz2iLyxbQl3i Cさん:kdfjkfjeij:$2a$10$xwqZpX3nJhldceSx05J78OzdLVnT0BSPp7J9xfFNYS0DHpteGQo/C
以上