개요
- awk를 이용하여 수정하고자하는 열을 정확하게 찾은 뒤 수정하기 위함
- 보통 sed로 수정시 같은 단어일시 일괄 변경되는 문제점이 있음
- 유니크한 다른열의 문자열을 찾은뒤 같은행의 다른 열의 문자를 변경한다.
세부내용
serverlist가 다음과 같다.
test-game01 업데이트날짜 업데이트사이즈
test-game02 업데이트날짜 업데이트사이즈
test-game03 업데이트날짜 업데이트사이즈
쉘스크립트는 다음과 같다.
#!/bin/bash
project=game
project_dir=/data/ansible/file/svn/project/$project
lists=`cat $project_dir/serverlist | awk '{print $1}'`
for list in $lists;do
chkcnt=`ls $project_dir/serverDeployInfo/${list}.txt | wc -l`
if [[ $chkcnt -eq 1 ]];then
updateday=`date -d "$(stat -c %y $project_dir/serverDeployInfo/${list}.txt)" '+%Y-%m-%d(%H:%M)'`
updatesize=`stat -c %s $project_dir/serverDeployInfo/${list}.txt`
echo "$list : $updateday / $updatesize"
awk -v list="${list}" -v updateday="${updateday}" '$1 == list { $2 = updateday }1' $project_dir/serverlist > $project_dir/serverlist.tmp && mv $project_dir/serverlist.tmp $project_dir/serverlist
awk -v list="${list}" -v updatesize="${updatesize}" '$1 == list { $3 = updatesize }1' $project_dir/serverlist > $project_dir/serverlist.tmp && mv $project_dir/serverlist.tmp $project_dir/serverlist
fi
done
awk -v list="${list}" -v updateday="${updateday}" '$1 == list { $2 = updateday }1' $project_dir/serverlist > $project_dir/serverlist.tmp && mv $project_dir/serverlist.tmp $project_dir/serverlist
awk -v list="${list}" -v updatesize="${updatesize}" '$1 == list { $3 = updatesize }1' $project_dir/serverlist > $project_dir/serverlist.tmp && mv $project_dir/serverlist.tmp $project_dir/serverlist
awk -v는 변수 지정이다. 업데이트대상(list)와 업데이트 일자와 사이즈를 담은 후
첫번째 열이 변수 list와 같으면
두번째, 세번째 열을 udpateday, updatesize값으로 업데이트한다는 뜻이다.
맨끝에 1은 참 으로 무조건 출력해라라는 뜻으로 생각하면된다.
반응형
'프로그래밍 > shellscript' 카테고리의 다른 글
[shellscript] 쉘스크립트 sed 문자 정확히 일치 할 때 바꾸기 (0) | 2023.11.03 |
---|---|
[shellscript] grep -r 하위 폴더 포함 파일 내용 검색하기 (0) | 2023.10.24 |
[powershell] 파워쉘 윈도우 계정 패스워드 변경 (0) | 2022.07.26 |
[LINUX] vi 계단 주석 해결벌 (0) | 2022.07.16 |
[쉘 스크립트] [ [[ 차이점 대괄호 1개와 2개의 차이점 (0) | 2022.06.22 |
댓글