셸 스 크 립 트 를 사용 하여 파일 데 이 터 를 빠르게 정렬 하고 다시 정렬 하 는 방법
1. 우선 주어진 지정 에 따라 정렬
2. 정렬 후 주어진 필드 를 무 게 를 줄 이 고 무 게 를 줄 이 는 규칙 은 다음 과 같다.
a) 정렬 후 인접 한 N 줄 의 주어진 필드 값 이 같은 줄 이 두 줄 을 초과 하지 않 으 면 두 줄 이 모두 보 존 됩 니 다.
a) 정렬 후 인접 한 N 줄 의 주어진 필드 값 이 같은 줄 이 두 줄 을 초과 하면 첫 줄 과 끝 줄 을 유지 합 니 다.
이런 업무 논 리 는 사실 그리 어려워 보이 지 않 는 다.그런데 문제 가 생 겼 는데 어떻게 10 ~ 20G 의 데이터 에서 신속하게 처리 할 수 있 습 니까?인터넷 에서 오랫동안 상응하는 처리 방법 을 찾 지 못 해서 먼저 상대 적 으로 어 리 석 은 방법 으로 실현 하 였 다.
테스트 데이터:
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
A0223EE1IDJDJ2938X39284BE,20080304041155 ,OQQQQ54,876F0,88888120,727271202,ss
A0223EE1IDJDJ2938X39284BE,20080304041155 ,OQQQQ54,876F0,88888120,727271202,ss
셸 스 크 립 트:
if [ "$#" != "2" ]; then
echo "Usage: 1: , 2: 。"
exit
fi
#
filepath=$1
#
orgfile=$filepath"/"$2
#
#mergerfile="$orgfile"_merge.txt
#
sortfile="$orgfile"_sort.txt
#
result_unique="$orgfile"_result_unique.txt
echo "">$result_unique
#echo " :$orgfile"
#echo " ..."
#awk 'BEGIN{ FS=",";}{ print $1","$2","$3","$4","$5","$6","$7","$1$3$4 }' $orgfile > $mergerfile
#echo " ..."
echo " start..."
#sort -t $"," -k 1,1 -k 9,9 $mergerfile >$sortfile
sort -t $"," -k 1,2 $orgfile >$sortfile
echo " end..."
printf "*********** start**************************
"
echo "while read line "
cnt=0
#
firstline=""
#
lastline=""
# key
lastKey=""
#
linecount=`sed -n '$=' $sortfile`
i=1
echo "linecount=========>>>>>>>$linecount"
while read line || [[ -n "$line" ]];
do
echo $line;
#
compare=`echo "$line"|awk -F ',' '{print $1$3$4}'`
echo "compare=====$compare"
#
if [ "$i" != "$linecount" -a "$lastKey" = "$compare" ];then
echo "[ = ]"
cnt=$(expr $cnt + 1)
lastline="$line"
else
#
if [ "$firstline" = "" ];then
firstline=$line
cnt=1
#echo "$firstline" >> $result_unique
fi
#echo "----$i---------------->>>>>>>>>>>$cnt"
if [ $cnt -gt 1 -o "$i" == "$linecount" ];then
echo "----$i---------------->>>>>>>>>>>$cnt"
if [ "$i" != "$linecount" -a "$lastline" != "" ];then
echo "$lastline" >> $result_unique
echo "$line" >> $result_unique
fi
#
if [ "$i" == "$linecount" ];then
echo "================last line==================="
echo "$line" >> $result_unique
fi
firstline="$line"
lastline="$line"
cnt=1
elif [ $cnt -eq 1 ];then
firstline=$line
lastline="$line"
cnt=1
echo "$lastline" >> $result_unique
fi
fi
# key
lastKey="$compare"
let i++
done <$sortfile
echo "******************* $orgfile ***************************"
echo "******************* $result_unique ***************************"
exit
스 크 립 트 에 실행 권한 추가:
chmod +x uniquefile.sh
셸 스 크 립 트 실행
sh ./uniquefile.sh ./
결과:
[root@xddsdsdsddssd ~]# sh uniquefile.sh ./ testfile.csv
start...
end...
*********** start**************************
while read line <. style="color:#008000;">//testfile.csv_sort.txt
linecount=========>>>>>>>6
A0223EE1IDJDJ2938X39284BE,20080304041155 ,OQQQQ54,876F0,88888120,727271202,ss
compare=====A0223EE1IDJDJ2938X39284BEOQQQQ54876F0
A0223EE1IDJDJ2938X39284BE,20080304041155 ,OQQQQ54,876F0,88888120,727271202,ss
compare=====A0223EE1IDJDJ2938X39284BEOQQQQ54876F0
[ = ]
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
compare=====F250A4FFIDJDJ2938X39252E7OQQQQB88769E
----3---------------->>>>>>>>>>>2
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
compare=====F250A4FFIDJDJ2938X39252E7OQQQQB88769E
[ = ]
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
compare=====F250A4FFIDJDJ2938X39252E7OQQQQB88769E
[ = ]
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
compare=====F250A4FFIDJDJ2938X39252E7OQQQQB88769E
----6---------------->>>>>>>>>>>3
================last line===================
******************* .//testfile.csv ***************************
******************* .//testfile.csv_result_unique.txt ***************************
최종 결과 파일:
[root@wewewwew ~]# more testfile.csv_result_unique.txt
A0223EE1IDJDJ2938X39284BE,20080304041155 ,OQQQQ54,876F0,88888120,727271202,ss
A0223EE1IDJDJ2938X39284BE,20080304041155 ,OQQQQ54,876F0,88888120,727271202,ss
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
F250A4FFIDJDJ2938X39252E7,20080304041348 ,OQQQQB8,8769E,88888626,727218105,ss
시간 이 비교적 촉박 하 니 우선 이렇게 실현 합 시다.어떤 분 이 좋 은 방법 이 있 는 지 저 에 게 알려 주세요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.