ファイル名に応じてファイルの内容を変更するスクリプトを作成したいと思います。
名前がファイル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