파일 이름에서 파일 내용 변경

파일 이름에서 파일 내용 변경

파일 이름에 따라 파일 내용이 변경되는 스크립트를 작성하고 싶습니다.

이름이 지정된 파일이 있고 ABC_20161027220153.txt파일 내용이 다음과 같다고 가정합니다.

2000|2000_ABC|04|||0000000000||

아래와 같이 파일 내용이 변경되는 스크립트를 만들고 싶습니다.

2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

어떻게 해야 하나요?

답변1

스크립트는 파일 이름을 명령줄 인수로 사용할 수 있습니다. 그런 다음 $1 변수를 사용하여 스크립트에서 이 인수를 호출하고 적합하다고 판단되는 대로 해당 변수를 조작할 수 있습니다. 예:

#!/bin/bash
# myscript.sh

year=`echo $1 | cut -c 5-8`
month=`echo $1 | cut -c 9-10`
day=`echo $1 | cut -c 11-12`

# Etc...
# Then...

repstr=`echo "$year$month$day|$day.$month.$year $hour.$minute.$second"`

sed -i "s/|||/$repstr/" $1

그런 다음 다음과 같이 스크립트를 호출하십시오.

./myscript.sh ABC_20161027220153.txt

답변2

#!/bin/sh

find . -name 'ABC_*.txt' | while read file; do
    res=$( echo "$file" | 
    sed -r 's#\S*_(....)(..)(..)(..)(..)(..).*#\1\2\3|\3.\2.\1 \4.\5.\6#' )

    col4=${res%|*}
    col5=${res#*|}

    sed -r -i.bak '
    s#(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|#\1|\2|\3|'"$col4"'|'"$col5"'|\6|\7|#' \
    "$file"
done

관련 정보