스 크 립 트 처리 빅 데이터 파일

3249 단어 shell
XX 줄 의 생산 문 제 를 처리 할 때 한 번 에 몇 십 개의 G 파일 을 만 났 는데 그 중에서 몇 만 개의 데이터 에 문제 가 있 고 응급 버 전 은 다음 에 보 낼 시간 이 없 었 다.마지막 으로 스 크 립 트 처리 방법 을 사 용 했 습 니 다. 주로 cut 및 paste 명령 을 사 용 했 는데 주로 빠 릅 니 다.몇 분 걸 려 요?다음은 스 크 립 트 의 처리 과정 을 상세 하 게 소개 합 니 다.처리 의 핵심 은 sed 를 이용 하여 문제 파일 의 오류 데 이 터 를 정확 한 데이터 로 바 꾸 는 것 입 니 다.cutfile.sh
#! /bin/ksh

if [ $# != 1 ]
then
    echo "FORMAT: cutfile.sh inputfile !"
    exit 1;
fi

filename=$1

head -n 1  $filename > .filehead.txt
tail -n +2 $filename > .filebody.txt

cut -c1-44     .filebody.txt  > .fileblock_1
cut -c45-52    .filebody.txt  > fileblock_2_gmt_date.txt        # gmt_date
cut -c53-68    .filebody.txt  > .fileblock_3
cut -c69-76    .filebody.txt  > fileblock_4_local_date.txt      # local_date
cut -c77-82    .filebody.txt  > .fileblock_5
cut -c83-90    .filebody.txt  > fileblock_6_settlement_date.txt # settlement_date
cut -c91-98    .filebody.txt  > fileblock_7_capture_date.txt    # capture_date
cut -c99-294   .filebody.txt  > .fileblock_8
cut -c295-302  .filebody.txt  > fileblock_9_orig_date.txt       # orig_date
cut -c303-     .filebody.txt  > .fileblock_10

touch .CUT.OK


2. 분 리 된 오류 파일 을 집계 하여 오류 횟수 유 니 버 설 파일. sh 찾기
#! /bin/ksh

if [ $# != 1 ]
then
    echo "FORMAT: nuiqfile.sh inputfile !"
    exit 1;
fi

filename=$1

cat  $filename | sort | uniq -c


3. 오류 분할 파일 교체 작업
#! /bin/ksh

if [ $# != 3 ]
then
    echo "FORMAT: sedfile.sh filename replacebefore replaceafter!"
    exit 1;
fi

if [ ! -f .CUT.OK ];then
    echo "please cut file,first!"
    exit 0
fi

filename=$1
repstr1=$2
repstr2=$3

sed "s/${repstr1}/${repstr2}/" $filename > .sedtmpfile

rm -f $filename
mv .sedtmpfile $filename


4. 처 리 된 파일 을 병합 하여 올 바른 파일 을 생 성 합 니 다.
#! /bin/ksh

if [ $# != 1 ]
then
    echo "FORMAT: pastefile.sh inputfile !"
    exit 1;
fi

if [ ! -f .CUT.OK ];then
    echo "please cut file,first!"
    exit 0
fi
filename=$1

#       \t,    paste       @,        grep "	" filename | wc -l  
#paste -d @ .fileblock_1                \
paste .fileblock_1                     \
      fileblock_2_gmt_date.txt         \
      .fileblock_3                     \
      fileblock_4_local_date.txt       \
      .fileblock_5                     \
      fileblock_6_settlement_date.txt  \
      fileblock_7_capture_date.txt     \
      .fileblock_8                     \
      fileblock_9_orig_date.txt        \
      .fileblock_10 > .filebodytmp.txt

#sed -e 's/@//g' .filebodytmp.txt >  .filenewbody.txt
sed -e 's/	//g' .filebodytmp.txt >  .filenewbody.txt

cat .filehead.txt .filenewbody.txt > ${filename}.new

rm -f .fileblock_1                     \
      fileblock_2_gmt_date.txt        \
      .fileblock_3                     \
      fileblock_4_local_date.txt      \
      .fileblock_5                     \
      fileblock_6_settlement_date.txt \
      fileblock_7_capture_date.txt    \
      .fileblock_8                     \
      fileblock_9_orig_date.txt       \
      .fileblock_10

rm -f .filehead.txt .filebody.txt .filenewbody.txt .filebodytmp.txt .CUT.OK

좋은 웹페이지 즐겨찾기