head testregions.bed

21      15390708       
21      15890068        16388793
21      16390041        16888505
21      16889055        17388185
21      17388731        17886839

I wanted to use each line of the .bed file as outputname e.g:

while readline  
do zip.sh > 21_15390708_ 15889554.zip

I read a bit about xargs being able to do this. But I am stuck on how it can output each line to unique output file name.

xargs -a testregions.bed -I {} zip inputfile {} >> outputfile_{}.zip

and so on. Any help is much appreciated.

  • I tried with below command and achieved as below let me know for any modifications awk '{print $1""$2""$3}' p.txt output :21_15390708_ 21_15890068_16388793 21_16390041_16888505 21_16889055_17388185 21_17388731_17886839 – Praveen Kumar BS Dec 6 '19 at 14:49

Here is an easy-to-understand way you can do this for every line in your testregions.bed. First, delete all the whitespace in your original file testregions.bed and save just the numbers into a new file new.txt like this:

cat testregions.bed | tr -d "[:blank:]" > new.txt

Then, you will create a new file for each line in your new.txt like this:

cat new.txt | while read line do touch "$line".zip done

And then you can delete the new.txt:

rm new.txt

So your script test.sh to create .zip files of testregions.bed would look like this:


cat testregions.bed | tr -d "[:blank"]" > new.txt
cat new.txt | while read line
        touch "$line".zip
rm new

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.