2

I have a file name

"PHOTOS_TIMESTAMP_5373382"

I want to extract from this filename "PHOTOS_5373382" and add "ABC" i.e. finally want it to look like

"abc_PHOTOS_5373382" in shell script.

Inian
  • 80,270
  • 14
  • 142
  • 161
divya.trehan573
  • 454
  • 1
  • 12
  • 28

3 Answers3

4

echo "PHOTOS_TIMESTAMP_5373382" | awk -F"_" '{print "ABC_"$1"_"$3}'

echo will provide input for awk command.

awk command does the data tokenization on character '_' of input using the option -F.

Individual token (starting from 1) can be accessed using $n, where n is the token number.

sameerkn
  • 2,209
  • 1
  • 12
  • 13
1

You will need the following sequence of commands directly on your shell, preferably bash shell (or) as a complete script which takes a single argument the file to be converted

#!/bin/bash

myFile="$1"                                            # Input argument (file-name with extension)
filename=$(basename "$myFile")                         # Getting the absolute file-path
extension="${filename##*.}"                            # Extracting the file-name part without extension
filename="${filename%.*}"                              # Extracting the extension part
IFS="_" read -r string1 string2 string3 <<<"$filename" # Extracting the sub-string needed from the original file-name with '_' de-limiter
mv -v "$myFile" ABC_"$string1"_"$string3"."$extension" # Renaming the actual file

On running the script as

$ ./script.sh PHOTOS_TIMESTAMP_5373382.jpg
`PHOTOS_TIMESTAMP_5373382.jpg' -> `ABC_PHOTOS_5373382.jpg'
Inian
  • 80,270
  • 14
  • 142
  • 161
0

Although I like awk

Native shell solution

k="PHOTOS_TIMESTAMP_5373382"
IFS="_" read -a arr <<< "$k"
echo abc_${arr[0]}_${arr[2]}

Sed solution

echo "abc_$k" | sed -e 's/TIMESTAMP_//g'
abc_PHOTOS_5373382
NinjaGaiden
  • 3,046
  • 6
  • 28
  • 49