[Shell Script] 어떻게 풀어야 할지 감이 안오네요
글쓴이: helperchoi / 작성시간: 수, 2018/04/18 - 10:20오후
cat test
111
222
333
444
555
666
cat test.list
222
333
[ Script 내용 ]
cat test.sh
#!/bin/bash
export LANG=C
export LC_ALL=C
RUNCNT=`cat ./test | wc -l`
for ((RUN=1; RUN <= RUNCNT ; RUN++));
do
PRINT_LINE=`sed -n ${RUN}p ./test`
WORKING_LIST=`cat ./test.list`
for LIST in ${WORKING_LIST}
do
MODIFI_LINE_NO=`grep -n "^${LIST}" ./test | cut -d ":" -f1`
if [ ${RUN} -eq ${MODIFI_LINE_NO} ]
then
echo "MMM - `sed -n ${RUN}p ./test`"
fi
done
echo ${PRINT_LINE}
done[ 실행 결과 값 ]
sh ./test.sh
111
MMM - 222
222
MMM - 333
333
444
555
666
[ 원하는 결과값 ]
111
MMM - 222
MMM - 333
444
555
666
위 원하는 결과 값 처럼 뽑고 싶은데 어디를 어떻게 수정해야 할지 도저히 감이 안오네요;;
오늘 하루종일 삽질을........
도와주세요 ㅠㅠ
Forums:


음 ..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
저도 혼자 더 고민해보고 자답을 적어봅니다.
RUNCNT=`cat test | wc -l` for ((RUN=1; RUN <= RUNCNT ; RUN++)); do MODIFY_CHECK=0 PRINT_LINE=`sed -n ${RUN}p test` WORKING_LIST=`cat test.list` for LIST in ${WORKING_LIST} do CHECK_MODIFY=`echo "${PRINT_LINE}" | grep "^${LIST}" | wc -l` if [ ${CHECK_MODIFY} -eq 1 ] then export MODIFY_CHECK=1 fi done if [ ${MODIFY_CHECK} -eq 0 ] then echo "${PRINT_LINE}" else echo "MMM - ${PRINT_LINE}" fi done이제는 대세다!
동작은 할 것 같습니다만, test, test
동작은 할 것 같습니다만, test, test.list를 읽어 들이는 회수는 ymir님의 코드에 비해서 비경제적입니다. ^^
스크립트는 최대한 동일한 파일 입력은 줄이는 것이 좋습니다.
---
http://coolengineer.com
comm -2 test test.list | sed
댓글 달기