'파일비교'에 해당되는 글 8건

  1. 2011.09.03 파일 비교 스크립트 8
  2. 2010.05.25 파일비교 스크립트 5 2
  3. 2009.12.22 15. 텍스트 파일 포맷 변경 2
  4. 2009.12.18 14. 지난 파일 압축하고 삭제하기 2
  5. 2009.11.05 13. 파일 비교 스크립트 4 2
  6. 2009.10.21 12. 파일 개수 비교해서 삭제하는 스크립트 3
  7. 2009.09.18 10. 파일비교 스크립트2 3
  8. 2009.09.10 9. 여러 파일 하나의 txt 파일로 합치기 스크립트 3
2011. 9. 3. 22:14

파일 비교 스크립트 8


최종 버전 파일 비교 스크립트 
어느 txt 파일이든 사이즈의 크기는 상관없음.
a.txt 와 b.txt 에 담긴 내용을 sort 하여 비교 


파일 비교 스크립트

(1) comm -12 a.txt b.txt
양쪽 모두에 존재

(2) comm -23 a.txt b.txt
a_only.txt

(3) comm -13 a.txt b.txt
b_only.txt


#!/bin/bash


### sort stage 

sort -u a.txt > imsy 

cat imsy > a.txt

sort -u b.txt > imsy

cat imsy > b.txt


### compare stage 

comm -12 a.txt b.txt > duble.txt

comm -23 a.txt b.txt > a_only.txt

comm -13 a.txt b.txt > b_only.txt


### Result stage 


echo "################################"

echo " a_only.txt is existed in a.txt"

echo "################################"


echo "################################"

echo " b_only.txt is existed in b.txt"

echo "################################"


echo "#########################################"

echo " double.txt is existed in a.txt & b.txt"

echo "#########################################"


 
2010. 5. 25. 00:31

파일비교 스크립트 5

a.txt 에는 원본 파일로 대용량 파일
b.txt 에는 부분 파일

a.txt 에 있는 내용중에 b.txt 파일에 있는 내용이 포함되어 있는 라인만 뽑아내는 스크립트

#!/bin/bash
dir=$PWD

for mdn in `cat $dir/b.txt | awk -F, '{print $1}'`
do
      grep  $mdn $dir/a.txt >> $dir/tmp.txt
done

결과는 tmp.txt 라는 파일에 저장된다.


최종 파일 비교 스크립트 -> http://darkrang.tistory.com/219



2009. 12. 22. 14:08

15. 텍스트 파일 포맷 변경


파일포맷을 확인하는 방법
[root@localhost ~]# file test
test: ASCII text

file 명령어는 ASCII 파일인지 UTF-8 인지 UNICODE 인지 확인하는 명령어



텍스트의 포맷이 일정하지 않아서 스크립트로 처리시에 오류가 생길 경우는

recode 명령어를 통해서 포맷을 일정하게 해주는 것이 좋다.

yum -y install recode 를 통해서 리눅스 CentOS 에 설치하고

recode -l 으로 포맷형식들을 확인

recode -f UTF-8 <파일명> 이라고 명령을 내리면 해당 파일이 UTF-8 로 포맷형식이 바뀌게 된다.


dos2unix 명령어는 VI 편집기로 열었을 때 라인끝에 ^M 이라는 문자가 보이는 경우가 있다
이것을 지워주는 역할을 한다.

그리고  Col 필터는 "\n\r" 문자를 "\n" 문자로 바꾸어 주는 필터이다.     또한 공백문자
를 탭문자로 바꾸고, 백스페이스 문자를 없애는 기능을한다
( 참고 : http://darkrang.tistory.com/117 )

따라서 vi 편집기로 열었을 때에 전체적으로 이상한 기호가 보이거나 한다면
위의 recode 명령어를 사용해서 텍스트 파일의 포맷을 변경해야 한다.

또한 recode 는 * 를 지원하므로

recode -f utf-8 *.txt 라고 적어도 모든 txt 파일에 대해서 적용된다.



recode -v <소스인코딩>...<출력인코딩> <파일명>

recode -v EUC-KR...UTF-8 *.txt

다음은 현재 디렉토리 안의 파일들의 txt 파일만 찾아서 파일포맷을 변경하는 스크립트이다


#!/bin/bash
DIR=$PWD
count=0
ls -l *.txt | awk '{print $9}' > filelist

for file in `cat $DIR/filelist`
do
recode -f UTF-8 $file
cat $file | col -b > imsy.txt
sort -u imsy.txt > $file
count=`expr $count + 1`
done
2009. 12. 18. 21:16

14. 지난 파일 압축하고 삭제하기

자 드뎌 완성 버전? 인가? ㅋ

ㅋㅋ

#!/bin/bash
## Day and DIR configuration
DATE=`date +%y%m%d`
echo "date is $DATE"
DIR=`echo $PWD`
echo $DIR

## Decide period "A" is the range of the keeping days

A=3

## Tar and gzip compress 

find $DIR -mtime +$A > $DIR/imsy.txt
tar -cvf $DATE.tar `find $PWD -mtime +$A`
gzip $DATE.tar

## remove old files 
        cat $PWD/imsy.txt | sed -n '/txt/p' > $PWD/imsy2.txt
        cat $PWD/imsy2.txt > $PWD/imsy.txt
        for B in `cat $PWD/imsy.txt`
        do
                echo $B
        #       rm -rf $PWD/$B
        done

우선 이 스크립트의 기능은 특정 디렉토리안에 쌓이는 파일들이 계속 있을 경우

특정날짜만큼만 디렉토리에 그대로 두고

예를 들어 3 일이 지난 파일들은 모두 tar.gz 로 압축을 하고 나서
압축된 파일들은 지워버림.ㅋㅋ



find ${DIR} -type f -mtime +7 | xargs rm -f  이건??


2009. 11. 5. 21:31

13. 파일 비교 스크립트 4

원본 파일(a.txt)에서  특정한 파일의 숫자들(b.txt) 을 뺀 나머지 라인들을 구하는 것

우선 원본 파일 변경되므로 원본파일은 다른 이름으로 변경시켜 놓는다.
#!/bin/bash
dir=$PWD
count=0
cp $dir/a.txt $dir/a.txt_org

for mdn in `cat $dir/b.txt | awk -F, '{print $1}'`
do
      sed -e "/"$mdn"/d" $dir/a.txt > $dir/imsy.txt
      cat $dir/imsy.txt > $dir/a.txt
      count=`expr $count + 1`
done
echo "count is =" $count

rm $dir/imsy.txt
작업할 디렉토리 지정
반복문이 몇번 실행되었는지 체크하기 위한 count 변수 지정
원본 a.txt 파일을 a.txt_org 으로 백업한다.

(2) for mdn in `cat /home/bjh/homepcssn/test/b.txt | awk -F, '{print $1}'`
for 반복문을 사용
mdn 이란 변수에 b.txt 파일에서 숫자가 있는 필드만 awk 로 골라내어서 for 문을 사용해 차례로 입력하도록 한다
( 나중에는 cat 부분만 변경해서 사용 / 숫자만 있는 파일이면 cat 만 써도 됨 )
awk 에서 -F 옵션은 구분자를 지정할때 사용 ( 지정하지 않으면 빈칸으로 필드 구분 )
즉 쉼표(,) 로 구분했을때 첫번째 필드가 숫자가 되기 때문에 사용
여기서 $mdn 이란 변수에는 숫자(전화번호) 만 들어간다

(3) sed -e "/"$mdn"/d" $dir/aa.txt > $dir/imsy.txt
변수 mdn이 포함된 라인만 지운 나머지 모든 라인을 임시파일 imsy.txt 파일에 저장한다.

(4) cat imsy.txt > a.txt
임시파일을 원본 a.txt 에 덮어쓴다
이때 첫번재 mdn 값을 제외한 모든 라인이 a.txt 에 덮어쓴다.

(5) count=`expr $count + 1`
반복문이 1번 반복될때마다 count 변수는 하나씩 증가한다.

(6) done
mdn 변수의 개수만큼 돌아가고 나서 반복문 종료

(7) echo "count is =" $count
반복문이 몇번 실행되었는지 확인
즉 mdn 변수가 몇번 변했는지도 알 수 있다.
즉 b.txt 에서 숫자가 몇라인이 들어있는지 알 수 있다

(8) rm $dir/imsy.txt
임시파일 삭제




최종 파일 비교 스크립트 -> http://darkrang.tistory.com/219


2009. 10. 21. 17:12

12. 파일 개수 비교해서 삭제하는 스크립트

같은 디렉토리에 쌓이는 파일 개수를 count 해서 특정한 값
이상이 되면 예전 파일 부터 삭제하는 스크립트


#!/bin/bash
DIR=$PWD
ls -l | grep PFX_COUNT | wc -l > A.txt
A=`cat $DIR/A.txt`
echo $A

if [ $A -lt 3 ]
then
echo "Count is low"
else
echo "Count is high"
        ls -lt | grep PFX_COUNT > $DIR/imsy.txt
        sed '1,3d' $DIR/imsy.txt | awk '{print $9}' > $DIR/imsy2.txt
        cat $DIR/imsy2.txt
                for test in `cat $DIR/imsy2.txt`
                do
                rm -rf $test
                done
fi
rm -rf $DIR/imsy.txt
rm -rf $DIR/imsy2.txt
rm -rf $DIR/A.txt

(1) ls -l | grep PFX_COUNT | wc -l > A.txt 

DIR 위치에 있는 파일들 중에서 PFX_COUNT 란 이름을 가진 파일들의 개수를 A.txt 에 저장

(2) A=`cat $DIR/A.txt`
A라는 변수에 그 개수를 저장

(3) if [ $A -lt 3 ]
만약 그 값이 3 보다 작다면 바로 아래 라인으로 이동해서 그 다음 명령 수행
만약 3보다 크면 else 밑의 명령들을 수행

(4)         ls -lt | grep PFX_COUNT > $DIR/imsy.txt
        sed '1,3d' $DIR/imsy.txt | awk '{print $9}' > $DIR/imsy2.txt
        cat $DIR/imsy2.txt

PFX_COUNT 가 포함된 파일의 리스트를 imsy2.txt 에 저장

(5)            for test in `cat $DIR/imsy2.txt`
                do
                rm -rf $test
                done

for 문으로 돌리면서 삭제해준다.

(6) 기타 임시txt 파일들을 삭제함


2009. 9. 18. 13:57

10. 파일비교 스크립트2

이번에는 두개의 파일이 있고
A 라는 파일은 원본 파일로 데이터량이 많다
B 라는 파일은 A보단 양이 적다.

원하는 것은 A 에서 B 를 제외한 나머지의 데이터를 알고 싶다.


#!/bin/bash
A=/user1/si/z_bjh/a.txt
B=/user1/si/z_bjh/b.txt
sdiff $A $B > c.txt
sed -n "/</p" c.txt | awk '{print $1}' > d.txt


sdiff 라는 것은 아래와 같이 동작한다.

두 텍스트 파일을 동시에 같이 보면서 그 차이점을 살펴보려면, 다음과 같이 합니다.

   sdiff file1 file2

sdiff 명령은 두 파일을 각각 한 줄씩 서로 비교해 가면서, 두 파일의 내용을 모두 출력합니다.

그 줄이 서로 다른 경우는 | 기호, file1에만 있는 경우는 < 기호, file2에만 있는 경우는 > 기호, 두 줄이 서로 똑 같은 경우는 아무것도 없습니다



예를 들어 a.txt 에 1부터 8까지 넣고  b.txt 에 1부터 4까지 넣었다면 아래와 같이 나온다.
오른쪽의 < 표시는 a.txt 에는 존재하고 b.txt 에는 존재하지 않는 것이다.

sdiff a.txt b.txt
1                                                               1
2                                                               2
3                                                               3
4                                                               4
5                                                             <
6                                                             <
7                                                             <
8                                                             <




최종 파일 비교 스크립트 -> http://darkrang.tistory.com/219

2009. 9. 10. 12:10

9. 여러 파일 하나의 txt 파일로 합치기 스크립트

#!/bin/bash
DIR="/user1/si/z_bjh/icms_data/"

A=`ls -l $DIR | awk '{print $9}'`

for i in `echo $A`
do
cat $DIR$i >> /user1/si/z_bjh/aa.txt
done

#echo "===== DONE !! ======="


먼저 하나로 합칠 여러개의 파일들을 하나의 디렉토리에 넣는다

/user1/si/z_bjh/icms_data  에 모두 넣고

변수 A 에   ls -l $DIR | awk '{print $9}'  명령을 통해서 파일명만 추출해서 넣음

 for 반복문으로
변수 i 에다가 변수A 가 계속적으로 반복되면서 하나씩 차례로 파일명을 넣을 것이고

cat $DIR$i >> /user1/si/z_bjh/aa.txt

aa.txt 라는 파일에 리다이렉트로  모든 파일의 내용을 계속적으로 넣는다.


------------

가장 쉬운 방법은 a.txt 와 b.txt 라는 두 개의 파일 있을 때

다음과 같이 리다이렉트를 사용해서 두개를 하나의 파일로 합치면 됩니다.

cat a.txt >> imsy.txt
cat b.txt >> imsy.txt

그런 다음에 중복된 것을 제거 하기 위해서 sort -u imsy.txt > imsy2.txt 라고 하면

마지막에 imsy2.txt 라는 파일 최종적으로 나오게 된다 ^^

참고로 필드별로 sort 하는 방법은 이전 글에 적어놓았음 --> [내가쓰는리눅스 강좌] - 25. sort 명령어