シェルを使用した文字列の値の減算と置換

シェルを使用した文字列の値の減算と置換

私のフォルダにファイルがあります。のように見える

1232_2019_02_09_12_29_29.txt
1232_2019_02_09_12_29_55.txt

2019_02_09_12_29_29ファイル名から&を抽出して&に変換したいです。2019_02_09_12_29_552019-02-09-1229292019-02-09-122955

#!/bin/sh

path=$1

if [[ -z $1 ]];then
        echo "USAGE:: Argument missing, supply full path to list all files"
        exit 1
fi

if [ -f $path/all_files.txt ] ; then
    rm -f $path/all_files.txt
fi

ls -l $path | grep -v "^d" | awk '{print $9}' > $path/all_files.txt

while read -r line
do
        line=${line##*/}
#       echo "${line%"/}"
        ex1=`awk -F'|' '{print substr($1,length($1)-22, 19)}'`
#       ex2=`awk -F'|' '{print substr($1,length($1)-19, 10)}'`
        echo $ex1
        ex2=$(echo $ex1 | cut -c 1-10)
        echo $ex2
        ex3=$(echo $ex1 | cut -c 12-20)
        echo $ex3
done <$path/all_files.txt

ただし、このコードは目的の結果を提供しません。

ベストアンサー1

whileループ全体を次の行に置き換えることができます。

awk -F'[._]' '{print $2"-"$3"-"$4"-"$5$6$7}' $path/all_files.txt

ファイル拡張子()を保持するには、.txt次のコマンドを使用する必要があります。

awk -F_ '{print $2"-"$3"-"$4"-"$5$6$7}' $path/all_files.txt

おすすめ記事