Xargs and


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Xargs and
# 1  
Old 03-08-2010
Xargs and

Hello there,

Let me show you a simple example of what I am trying to achieve:

1) I have an input text file with some lines:

1 a
2 b
3 c

2) And I want to run a command with these lines as arguments (+ arbitrary extra arguments). For example:

$ command "1 a" "2 b" "3 c" "bye"

I tried with the xargs -I replace-str option, but I didn't succeed. Obviously, we can always write:

$ { cat file; echo "bye"; } | xargs -d"\n" command

I won't say that's ugly, but I feel it may be another smarter solution. Any ideas?
# 2  
Old 03-08-2010
Please test first. and check if this suits you.
Code:
awk 'BEGIN{printf "command "}{printf "\"%s\" ",$0}END{printf "bye"}' file | sh

# 3  
Old 03-08-2010
Quote:
Originally Posted by anchal_khare
Please test first. and check if this suits you.
Code:
awk 'BEGIN{printf "command "}{printf "\"%s\" ",$0}END{printf "bye"}' file | sh

Unless really necessary, I think it's better to avoid "eval" approaches, it can get tricky (i.e. you have to worry about escaping quotes).
# 4  
Old 03-08-2010
Hey, tokland:

To the best of my knowledge, what you seek cannot be done (at least not with the xargs implementations with which I'm familiar, GNU may be another story). The -I and -L options deal with entire lines and pass them as a single argument. The least ugly, portable (-d isn't standardized, if that's of any importance) solution that I can come up with:

Code:
echo bye | cat data - | sed 's/ /\\ /g' | xargs command

More or less what you had already come up with. Please post back if you find an elegant solution.

Regards,
Alister

Edit: Do not use the pipeline above. It behaves badly when the space is quoted.

Last edited by alister; 03-09-2010 at 12:26 PM..
# 5  
Old 03-09-2010
xargs can take input from both a file and arguments at the same time, the downside is that it always puts arguments first, even if you take the "$*" and put it on the end.
Code:
xargs -d"\n" command $* < file

This will work for:
command any arguments "1 a" "2 b" "3 c"
but not:
command "1 a" "2 b" "3 c" arguments.

To put arguments on the end, it looks like this is the only option.
Code:
echo $* | cat file - | xargs -d"\n" command

# 6  
Old 03-09-2010
Quote:
Originally Posted by alister
Code:
echo bye | cat data - | sed 's/ /\\ /g' | xargs command

Hey, that's a good idea, use cat to join multiple argument sources.

Quote:
Originally Posted by fubaya
xargs can take input from both a file and arguments at the same time, the downside is that it always puts arguments first
That's right, xargs works perfectly when inserting arguments at the end of the command.

Quote:
Originally Posted by fubaya
To put arguments on the end, it looks like this is the only option.
Code:
echo $* | cat file - | xargs -d"\n" command

That would work in my example (only one extra argument was used: 'bye'), but multiple arguments would be joined due to the "\n" being the delimiter. This can be easily solved echoing a line for each argument:

Code:
for ARG in "4 extra" "5 onemore"; do echo $ARG; done | cat file - | xargs -d"\n" command

Too bad we don't have (AFAIK) a join function (like Python's str.join), we could have written this pretty neat solution:

Code:
joinstr -d"\n" "4 extra" "5 onemore" | cat file - | xargs -d"\n" command

# 7  
Old 03-09-2010
Hey, tokland:

Quote:
Originally Posted by tokland
Too bad we don't have (AFAIK) a join function (like Python's str.join), we could have written this pretty neat solution:

Code:
joinstr -d"\n" "4 extra" "5 onemore" | cat file - | xargs -d"\n" command

Ask and ye shall receive. Smilie
Code:
printf '%s\n' "$@" | cat file - | xargs -d"\n" command

That will work fine so long as none of the positional parameters in $@ contain an embedded newline, which is probably an unlikely scenario (all the other solutions in this thread are similarly flawed).

Regards,
Alister

Last edited by alister; 03-09-2010 at 12:31 PM.. Reason: Removed erroneous alternative
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Xargs

Hi, can anyone tell me in detail ? what the following do in detail ? I am trying to get a largest number in a list Thanks Tao LARGEST=$(echo $* | xargs -n1 | sort -nr | tail -1) (3 Replies)
Discussion started by: ccp
3 Replies

2. Shell Programming and Scripting

Xargs

Hello, I need some help with xargs $ ls aaa bbb ccc ddd$ ls | xargs -I{} ls -la {} -rw-rw-r--. 1 xxx xx 0 May 30 20:04 aaa -rw-rw-r--. 1 xxx xx 0 May 30 20:04 bbb -rw-rw-r--. 1 xxx xx 0 May 30 20:04 ccc -rw-rw-r--. 1 xxx xx 0 May 30 20:04 dddit's possible to have output like this with... (3 Replies)
Discussion started by: vikus
3 Replies

3. Shell Programming and Scripting

Help with xargs

Using the bash shell I'm trying to either create a command for the command line or a script that will show netstat info for a given process name. Here is an example of what I'm trying to do:$ ps aux |grep catalina |grep -v grep | awk '{print $2}' 5132 $ netstat -nlp |grep 5132 (Not all processes... (11 Replies)
Discussion started by: axiopisty
11 Replies

4. Shell Programming and Scripting

xargs

Dear all , any suggest on xargs to combine from (1.txt and 2.txt) to output.txt ? thanks a lot. 1.txt 0123 BUM-5M BUM-5M 93490481 63839 0124 BUM-5M BUM-5M 112112 ... (3 Replies)
Discussion started by: samoptimus
3 Replies

5. Shell Programming and Scripting

Help with xargs

hi Could any one please tell me the option using which we can run multiple commands using xargs I have list of files, I want to run dos2unix and chmod at one shot on them I tried google n searched man pages but couldnt really find the solution , please help right now im doing this ls... (4 Replies)
Discussion started by: sunilmenhdiratt
4 Replies

6. Shell Programming and Scripting

Help in using xargs

Hi, I have a requirement to RCP the files from remote server to local server. Also the RCP has to run in parallel. However using 'xargs' retrives 2 file names during each loop. How do we restrict to only one file name using xargs and loop till remaining files. I use the below code for... (2 Replies)
Discussion started by: senthil3d
2 Replies

7. Shell Programming and Scripting

Using xargs

hi i just want to know that how do we use xargs command to find files which are greater than specified memory in a given directory (6 Replies)
Discussion started by: sumit the cool
6 Replies

8. UNIX for Advanced & Expert Users

xargs -P

I discovered that GNU's xargs has a -P option to allow its processes to run in parallel. Great! Is this a GNU thing, or is it supported by other platforms as well? (4 Replies)
Discussion started by: otheus
4 Replies

9. Shell Programming and Scripting

why we use xargs..

hi , can anyone help me by saying why we use xargs.. is it acing like a place holder..? thanks, Krips. (3 Replies)
Discussion started by: kripssmart
3 Replies

10. UNIX for Dummies Questions & Answers

Help with xargs

Hi there, I am trying to move around 3000 files from one directory to another. The mv command is complaining from too many arguments. I tried to use the xargs command but with no luck. Could some body provide help? Regards (4 Replies)
Discussion started by: JimJim
4 Replies
Login or Register to Ask a Question