xargs - použití n-tic položek do jednoho příkazu

lathe

xargs - použití n-tic položek do jednoho příkazu
« kdy: 13. 12. 2021, 11:22:28 »
Dá se použít xargs k nějakému takovému výsledku?
Kód: [Vybrat]
# echo 1 2 3 4 5 6 | xargs -d " " comm -a % -b %
#případně
# echo -e "1 \n2 \n3 \n4 \n5 \n6\n" | xargs comm -a % -b %
#nebo ještě lépe
# echo -e "1 \n2 \n3 \n4 \n5 \n6\n" | xargs comm -a %2 -b %1
#vypis prvnich dvou
comm -a 1 -b 2 , comm -a 3 -b 4, comm -a 5 -b 6
#vypis "nebo ještě lépe"
comm -a 2 -b 1 , comm -a 4 -b 3 , comm -a 6 -b 5

#prozatím vím jen o:
# echo -e "1 \n2 \n3 \n4 \n5 \n6\n" | xargs -n 2 comm -a -b  # ===> Parametry se přidají na konec příkazu
# echo -e "1 \n2 \n3 \n4 \n5 \n6\n" | xargs -I _ comm -a _  -b  _  # ===> výsledkem ale je comm -a 1 -b 1 atd.

Četl jsem man, klíčové jsou volby -n, -L -x ,- d -I. Ale volba I podle nápovědy implikuje -L 1 a -x. Ale i tak jde určit -I, a -L/-n.
Mimochodem, jaký je rozdíl mezi volbou -n a L? Nenarazil jsem na to. Hraje u xargs taky rozdíl když jsou záznamy oddělené mezerou nebo novým řádkem? (Jaké vím, že -vlastní oddělovač jde určit -d, ale právě v man se něco píše od space separated arguments myslím.)


Použilo by se na takovéhle zadání třeba sprintf nebo zřetězení xargs | xargs?
« Poslední změna: 13. 12. 2021, 12:01:57 od Petr Krčmář »


Re:xargs - použití n-tic položek do jednoho příkazu
« Odpověď #1 kdy: 14. 12. 2021, 09:31:20 »
Můžeš si pomoci (anonymním) skriptem, který žere 2 argumenty a pomoci xargs pouštět ten pomocní, tj.
Kód: [Vybrat]
xargs -n2 sh -c 'comm -a $1 -b $0'
V tvém případě
Kód: [Vybrat]
echo -e "1 \n2 \n3 \n4 \n5 \n6\n" | xargs -n2 sh -c 'comm -a $1 -b $0' zavolá
comm -a 2 -b 1
comm -a 4 -b 3
comm -a 6 -b 5