본문 바로가기
프로그래밍/shellscript

[shellscript] awk v옵션 문자를 찾고 같은 행 특정 열 치환하기

by IT맥구리나스 2023. 4. 18.

개요

- 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은 참 으로 무조건 출력해라라는 뜻으로 생각하면된다.

 

반응형

댓글