Bash to remove find and remove specific extension


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Bash to remove find and remove specific extension
# 1  
Old 03-29-2019
Bash to find and remove specific extension

The bash below executes and does find all the .bam files in each R_2019 folder. However set -x shows that the .bam extension only gets removed from one .bam file in each folder (appears to be the last in each). Why is it not removing the extension from each (this is $SAMPLE)? Thank you Smilie.

Code:
set -x
DIR=/home/cmccabe/Desktop/f1   ## define data directory path
for RDIR in "$DIR"/R_2019* ; do
      BAM=$(find "$RDIR"/bam -type f -name "*.bam" -printf '%P\n')
       SAMPLE=$(echo $BAM|cut -d. -f1)
echo "$SAMPLE"
done

Code:
R_2019_03_12_11_10_20_user_S5-0271-99
     -bam
       19-0000-LastName-FirstName.bam.bai 19-0000-LastName-FirstName.bam 19-0001-Las-Fir.bam.bai 19-0001-Las-Fir.bam 190319-Control.bam.bai 190319-Control.bam
R_2019_03_12_13_59_54_user_S5-0271-100
     -bam
        19-0004-La-Fi.bam.bai 19-0004-La-Fi.bam.bam 19-0005-Last-Firs.bam.bai 19-0005-Last-Firs.bam 19-0008-LastN-FirstN.bam.bai 19-0008-LastN-FirstN.bam 190320-Control.bam.bai 190320-Control.bam

set -x
Code:
set -x
cmccabe@DTV-A5211QLM:~$ DIR=/home/cmccabe/Desktop/f1   ## define data directory path
+ DIR=/home/cmccabe/Desktop/f1
cmccabe@DTV-A5211QLM:~$ for RDIR in "$DIR"/R_2019* ; do
>       BAM=$(find "$RDIR"/bam -type f -name "*.bam" -printf '%P\n')
>        SAMPLE=$(echo $BAM|cut -d. -f1)
> echo "$SAMPLE"
> done
+ for RDIR in '"$DIR"/R_2019*'
++ find /home/cmccabe/Desktop/f1/R_2019_03_12_11_10_20_user_S5-0271-99/bam -type f -name '*.bam' -printf '%P\n'
+ BAM='190319-Control.bam
19-0001-Las-Fir.bam
19-0000-LastName-FirstName.bam'
++ echo 190319-Control.bam 19-0001-Las-Fir.bam 19-0000-LastName-FirstName.bam
++ cut -d. -f1
+ SAMPLE=190319-Control
+ echo 190319-Control
190319-Control
+ for RDIR in '"$DIR"/R_2019*'
++ find /home/cmccabe/Desktop/f1/R_2019_03_12_13_59_54_user_S5-0271-100/bam -type f -name '*.bam' -printf '%P\n'
+ BAM='190320-Control.bam
19-0008-LastN-FirstN.bam
19-0005-Last-Firs.bam
19-0004-La-Fi.bam'
++ echo 190320-Control.bam 19-0008-LastN-FirstN.bam 19-0005-Last-Firs.bam 19-0004-La-Fi.bam
++ cut -d. -f1
+ SAMPLE=190320-Control
+ echo 190320-Control
190320-Control


Last edited by cmccabe; 03-29-2019 at 11:07 AM..
# 2  
Old 03-29-2019
You need an inner loop
Code:
# -------------- new inner loop
     find "$RDIR"/bam -type f -name "*.bam" -printf '%P\n' |
    while read BAM
    do
       SAMPLE=$(echo $BAM|cut -d. -f1)  #  lose the cut and use this instead: SAMPLE=${BAM%%.*}  
      #   Try it first before running in a script
      # do things with $SAMPLE here  I guess:  like mv $BAM $SAMPLE
   done
# ---------- end new inner loop

Try not use use a lot of child processes when bash does the same thing as a builtin. Smilie

Your code did this: put all filenames into variable BAM, zap just one. You need to read and then zap each file inside some type of loop.
I need to learn how to type and fix errors on the fly. I had to edit this post three times Smilie

Last edited by jim mcnamara; 03-29-2019 at 11:48 AM..
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 03-29-2019
Thank you very much for your help and explanations Smilie
# 4  
Old 03-29-2019
Quote:
Originally Posted by cmccabe
The bash below executes and does find all the .bam files in each R_2019 folder. However set -x shows that the .bam extension only gets removed from one .bam file in each folder (appears to be the last in each). Why is it not removing the extension from each (this is $SAMPLE)? Thank you Smilie.

Code:
set -x
DIR=/home/cmccabe/Desktop/f1   ## define data directory path
for RDIR in "$DIR"/R_2019* ; do
      BAM=$(find "$RDIR"/bam -type f -name "*.bam" -printf '%P\n')
       SAMPLE=$(echo $BAM|cut -d. -f1)
echo "$SAMPLE"
done

I think you could spare yourself a lot of hassle (and the system a lot of work) doing it like this:

Code:
for RDIR in "$DIR"/R_2019* ; do
     find "$RDIR"/bam -type f -name "*.bam" -exec /path/to/movescript.sh {} \;
done

where /path/to/movescript.sh would contain

Code:
!# /bin/sh

echo mv "${1}" "${1%.bam}"

exit $?

If you are satisfied with the list of commands remove the "echo" in the script.

I hope this helps.

bakunin
This User Gave Thanks to bakunin For This Post:
# 5  
Old 03-29-2019
Thank you very much, very helpful Smilie.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Bash to create sub directories from specific file extension

In the bash below I am trying to create sub-directories inside a directory from files with specific .bam extensions. There may be more then one $RDIR ing the directory and the .bam file(s) are trimmed (removing the extension and IonCode_0000_) and the result is the folder name that is saved in... (2 Replies)
Discussion started by: cmccabe
2 Replies

2. Shell Programming and Scripting

Remove extension in loop

Dear all sorry for bothering you wityh dumb question but I am stucked with an issue. Well, I am trying to loop over files in folder, make an operation and rewrite the output. Example: INPUT file1.txt file2.txt file3.txtMy command (doesn't work!!) for file in /path/to/*.txt do command... (13 Replies)
Discussion started by: giuliangiuseppe
13 Replies

3. Shell Programming and Scripting

Remove the last 15 characters of a filename with respect to leave file extension

how can i remove numbers of characters from the last name of file with respect to not remove the files extension example VFX_Official_Trailer_(HD)__Shhh__-_by_Freddy_Chavez_Olmos_&_Shervin_Shoghian-.mp4 i want to rename this to VFX-Official-Trailer-(HD)-Shhh... (13 Replies)
Discussion started by: ateya
13 Replies

4. Shell Programming and Scripting

How to remove filenames having the same extension.?

hi, i have a directory which contains some files and a subdirectory. i am writing only the files names to a file using the below code. ls -ltr | grep "^-" | awk '{print $NF}' > /home/file_list$$ cat /home/file_list$$ s1_abc.txt s2_def.xls s3_def.xls as you can see there is one .txt... (7 Replies)
Discussion started by: Little
7 Replies

5. Shell Programming and Scripting

Remove the file except with particular extension

Hi all i am new for the shell scripting can any one help me with my requirments . i want to delete file older than 21 days everything works fine but in that dir i got the files with should not be deleted with particular extension like (.info):confused:here is the script i wrote .can anyone... (5 Replies)
Discussion started by: vikatakavi
5 Replies

6. Shell Programming and Scripting

[Solved] remove file extension

Hi, I have some files with some extension e.g. abc.xml.REMOVE,xyz.xml,efg.xml.REMOVE . I have to remove the .REMOVE extension. I can display it using the below script but cannot rename it. ls -l|sed 's/\.REMOVE//' How can I rename this? Thanks in advance (7 Replies)
Discussion started by: babom
7 Replies

7. Shell Programming and Scripting

perl script to remove the extension from its name

There are few files in my windows directory and I need a perl script to rename the files to its original names i.e., the last extension(.orig) needs to be removed programatically, files in directory data1.htm.orig data2.htm.orig data3.htm.orig to be renamed to data1.htm data2.htm... (4 Replies)
Discussion started by: giridhar276
4 Replies

8. UNIX for Dummies Questions & Answers

how can i remove files with extension in many folders

hello i have 2 question if i have 1 folder and under this folder many many sub folders and in every folders many files with man extension like *php * jpg * gif i need to remove all *php files 1- from tha main folder only 2- from tha main folder and all sub folders the second how... (6 Replies)
Discussion started by: ateya
6 Replies

9. Shell Programming and Scripting

bash find and remove text

Here's the story: I have two txt files of filenames one is like this W00CHZ0103340-I1CZ31 W00CHZ0103340-I1CZ32 W00CHZ0103340-I1CZ33 W00CHZ0103341-I1CZ35 W00CHZ0103342-I1CZ46 W00CHZ0103343-I1CZ37 W00CHZ0103344-I1CZ39 W00CHZ0103345-I1CZ43 W00CHZ0103345-I1CZ44 ... the other like this ... (5 Replies)
Discussion started by: Movomito
5 Replies

10. Shell Programming and Scripting

remove file extension

Hi ALL, I'm new to this forum. Thanks and congrats to all for their great efforts building this site simply superb for all unix administrators. My requirement is to remove extensions of the files in the current directory. I'm doing it using below script which is working but i think it is... (12 Replies)
Discussion started by: prvnrk
12 Replies
Login or Register to Ask a Question