요소가 쉼표로 구분된 문자열인 배열을 버블 정렬할 수 있습니까?
현재 나는 이것을 가지고 있습니다 :
lines=$(wc -l filename.txt | awk '{ print $1 }')
while IFS=, read -r col1 col2 col3
do
#echo "$col1 , $col2, $col3"
arr+=($col3)
arrOrig+=($col3)
arrList+=($col1,$col2,$col3)
done < filename.txt
echo "Array in original order"
echo ${arr[*]}
#Performing Bubble sort
for ((i = 0; i<$lines; i++))
do
for ((j = i; j<$lines-i-1; j++))
do
if ((${arr[j]} > ${arr[$((j+1))]}))
then
#swap
temp=${arr[$j]}
arr[$j]=${arr[$((j+1))]}
arr[$((j+1))]=$temp
fi
done
done
파일 이름의 데이터는
text
, number
, 로 저장됩니다 number
.
제 예에서는 잃지 않고 좋아요 array arrList($col1,$col2,$col3)
만으로 정렬이 가능한가요 ?$col3
$col1
$col2
답변1
다음과 같은 방법으로 필드 3을 기준으로 버블 정렬을 수행할 수 있습니다.
#!/bin/bash
while IFS=, read -r col1 col2 col3
do
arr+=("$col1, $col2, $col3")
done < tel.txt
echo "Array in original order: "
for i in "${arr[@]}"
do
echo "$i "field3=`echo $i | cut -d ',' -f 3`
done
lines=`cat tel.txt | wc -l`
#Performing Bubble sort
for ((i = 0; i<$lines; i++))
do
for ((j = i; j<$lines-i-1; j++))
do
if (( `echo ${arr[j]} | cut -d ',' -f 3` > `echo ${arr[$((j+1))]} | cut -d ',' -f 3` ))
then
#swap
temp=${arr[$j]}
arr[$j]=${arr[$((j+1))]}
arr[$((j+1))]=$temp
fi
done
done
echo "Array in sorted order: "
for i in "${arr[@]}"
do
echo "$i "
done
광산에는 tel.txt
다음 문자열이 포함되어 있습니다.
yurijs-MacBook-Pro:bash yurij$ cat tel.txt
Some text1, 45, 23
Some test2, 12, 3
Some text3, 33, 99
Some test4, 56, 22
Some text5, 22, 65
달리기 buuble_sort.sh
:
yurijs-MacBook-Pro:bash yurij$ ./buuble_sort.sh
Array in original order:
Some text1, 45, 23 field3= 23
Some test2, 12, 3 field3= 3
Some text3, 33, 99 field3= 99
Some test4, 56, 22 field3= 22
Some text5, 22, 65 field3= 65
Array in sorted order:
Some test2, 12, 3
Some test4, 56, 22
Some text1, 45, 23
Some text5, 22, 65
Some text3, 33, 99
물론 이 코드는 최적화되지 않았으며 중복된 내용을 포함하고 있습니다. 개선할 수 있습니다.