일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 팰린드롬개수
- c드라이브에서 압축 안될때
- 특정ip접근
- 데이터넘기기
- ipv6->ipv4
- java
- 로또의 최고 순위와 처저 순위
- 프로그래머스
- Linux
- c드라이브에서 압축
- Docker
- 2022 KAKAO BLIND RECRUITMENT
- mybatis
- 관리자권한 문제
- usb 포맷시스템
- db
- programmers
- 압축권한
- usb 공간있는데
- LV1
- PostgreSQL
- 파일이 너무 커서 안들어감
- 폴더압축 권한문제
- 6tunnel
- maven-install
- 특정ip차단
- on conflict
- 방화벽정책
- 신고결과받기
- 도커
- Today
- Total
개발 기록일지
쉘스크립트로 txt 내용 바꾸기 - vi 편집기 본문
1,0777770001001,101,101,0,2,16,1,1,1530,POWER,5502
2,0777770001001,101,102,2,2,16,1,1,1530,POWER,5502
3,0777770001001,101,103,4,2,16,1,1,1530,POWER,5502
4,0777770001001,101,104,6,2,16,1,1,1530,POWER,5502
5,0777770001001,101,105,8,2,16,1,1,1530,POWER,5502
1,0777770001001,112,101,0,2,16,1,1,9999,MAP,5502
2,0777770001001,112,102,2,2,16,1,1,9999,MAP,5502
3,0777770001001,112,103,4,2,16,1,1,9999,MAP,5502
4,0777770001001,112,104,6,2,16,1,1,9999,MAP,5502
5,0777770001001,112,105,8,2,16,1,1,9999,MAP,5502
1,0777770001002,102,101,0,2,16,1,1,1530,POWER,5502
2,0777770001002,102,102,2,2,16,1,1,1530,POWER,5502
3,0777770001002,102,103,4,2,16,1,1,1530,POWER,5502
4,0777770001002,102,104,6,2,16,1,1,1530,POWER,5502
5,0777770001002,102,105,8,2,16,1,1,1530,POWER,5502
1,0777770001002,113,101,0,2,16,1,1,9999,MAP,5502
2,0777770001002,113,102,2,2,16,1,1,9999,MAP,5502
3,0777770001002,113,103,4,2,16,1,1,9999,MAP,5502
4,0777770001002,113,104,6,2,16,1,1,9999,MAP,5502
5,0777770001002,113,105,8,2,16,1,1,9999,MAP,5502
test.txt 이런 파일이있다
** 2번째 컬럼은 길이고정이고 계속 증가한다 1,2,3,4, 쭉
** 3번째 컬럼은 길이고정이고 맨앞자리는 고정
** 10번째 컬럼은 변하지 않음
** 11번째 컬럼이 MAP인 행들은 2번째 컬럼,3번째 컬럼이 순차적으로 증가하는 거고 나머지는 다 고정임
**해야할일**
./test.sh 1 3 이렇게 parameter 2개를 입력해 같이 실행하면
10번째 컬럼이 1530이면서 2번째 컬럼이 0777770001001 인 행들의 3번째컬럼 (101)을
103으로 바꿔야한다
=> 이렇게
1,0777770001001,103,101,0,2,16,1,1,1530,POWER,5502
2,0777770001001,103,102,2,2,16,1,1,1530,POWER,5502
3,0777770001001,103,103,4,2,16,1,1,1530,POWER,5502
4,0777770001001,103,104,6,2,16,1,1,1530,POWER,5502
5,0777770001001,103,105,8,2,16,1,1,1530,POWER,5502
1,0777770001001,112,101,0,2,16,1,1,9999,MAP,5502
2,0777770001001,112,102,2,2,16,1,1,9999,MAP,5502
3,0777770001001,112,103,4,2,16,1,1,9999,MAP,5502
4,0777770001001,112,104,6,2,16,1,1,9999,MAP,5502
5,0777770001001,112,105,8,2,16,1,1,9999,MAP,5502
1,0777770001002,102,101,0,2,16,1,1,1530,POWER,5502
2,0777770001002,102,102,2,2,16,1,1,1530,POWER,5502
3,0777770001002,102,103,4,2,16,1,1,1530,POWER,5502
4,0777770001002,102,104,6,2,16,1,1,1530,POWER,5502
5,0777770001002,102,105,8,2,16,1,1,1530,POWER,5502
1,0777770001002,113,101,0,2,16,1,1,9999,MAP,5502
2,0777770001002,113,102,2,2,16,1,1,9999,MAP,5502
3,0777770001002,113,103,4,2,16,1,1,9999,MAP,5502
4,0777770001002,113,104,6,2,16,1,1,9999,MAP,5502
5,0777770001002,113,105,8,2,16,1,1,9999,MAP,5502
#은 다 주석
#!/bin/bash
file=test.txt
devId=$( awk '/1530/' $file | cut -d ',' -f2 | sort -u )
#2번째컬럼 추출
existing_unitId=$( awk '/1530/' $file | cut -d ',' -f3 | sort -u )
#3번째컬럼 추출
devId_unitId=$( awk '/1530/' $file | cut -d ',' -f2,3 | sort -u )
#2번째,3번째 같이 추출
#forth_devId=${devId:0:11} # 2번째컬럼에서 뒤2자리 빼고 자르기
forth_unitId=${existing_unitId:0:1} # 3번째컬럼의 고정값 (맨 앞자리) 자르기
#echo "$devId"
#echo $existing_unitId
#echo $devId_unitId
#echo $forth_devId
#echo $forth_unitId
#sed -z 's/.*\(077777[^1]\+\).*/\1/g' $devId
forth_devId=$(echo $devId | cut -d ' ' -f$1)
forth_devId_code=${forth_devId:0:11}
echo $forth_devId_code
#Check the number of parameters
if [ $# -eq 0 ] ; then
echo "Warning: no arguments"
exit 0
elif [ $# -eq 1 ] || [ $# -ge 3 ] ; then
echo "Warning: You should input 2 parameter"
exit 0
else
echo "The number of parameters is 2 was checked "
fi
#Check parameter length
if [ ${#1} -ne 2 ] ; then
echo "Warning: You should input 2-digits parameter"
exit 0
elif [ ${#2} -ne 2 ] ; then
echo "Warning: You should input 2-digits parameter"
exit 0
fi
echo "The parameter length was checked"
for unitId in $devId_unitId; do
if [[ $unitId =~ $forth_devId_code$1 ]]; then
unitId=$(echo "${unitId#*,}")
vi -c "%s/$forth_devId_code$1,$unitId/$forth_devId_code$1,$forth_unitId$2/g" -c "wq" test.txt
echo "changed"
fi
done
업무 하면서 필요한 부분이라 만든 shellscript이다.
특정 패턴이 반복되고 특정 부분들만 변하는 파일인데
원하는 부분만 추출해서 변경해서 저장하기가 참 어렵당;;
그리고 vi편집기를 쓸때 vi로 직접 열어서 작업하고 저장하는게 아니고
저렇게 -c 를 쓰면 vi를 열지 않고 수정해서 저장이 가능함 *_*
'프로그래밍 > Linux,ShellScript' 카테고리의 다른 글
IPV6 -> IPV4 통신 방법 (0) | 2021.09.07 |
---|---|
리눅스 IPTABLE 사용 예시(특정 IP/PORT) (0) | 2021.08.30 |