├── README.md ├── input (copy) ├── sample.txt ├── sample1.txt ├── sample2.txt ├── sample3.txt ├── sample4.txt ├── sample5.txt ├── sample6.txt ├── sample7.txt ├── sample8.txt └── sample9.txt ├── input ├── sample.txt ├── sample1.txt ├── sample11.xlsx ├── sample12.xlsx ├── sample14.avro ├── sample15.avro ├── sample16.avro ├── sample17.avro ├── sample2.txt ├── sample3.txt ├── sample4.txt ├── sample5.txt ├── sample6.txt ├── sample7.txt ├── sample8.txt ├── sample9.txt ├── smaple10.xlsx └── smaple13.xlsx ├── myShell.sh ├── myShell_backup.sh └── script.sh /README.md: -------------------------------------------------------------------------------- 1 | parallel processing using xargs 2 | 3 | -------------------------------------------------------------------------------- /input (copy)/sample.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample1.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample2.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample3.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample4.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample5.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample6.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample7.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample8.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input (copy)/sample9.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input/sample.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample1.txt: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input/sample11.xlsx: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample12.xlsx: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input/sample14.avro: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input/sample15.avro: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input/sample16.avro: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe -------------------------------------------------------------------------------- /input/sample17.avro: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /input/sample2.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample3.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample4.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample5.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample6.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample7.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample8.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/sample9.txt: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe 2 | -------------------------------------------------------------------------------- /input/smaple10.xlsx: -------------------------------------------------------------------------------- 1 | hahahaha jdsfkjsdafj xcnvkds weuroiuewqo xcnvkjhdsf iweuroewqu dfjlfgdf cb cbfdgter erterw c cvh a wer werewfdgfd d gryter wyrte y sfg erwt ewgds fbv dsbds t re wy fhg fdh dsf hsdjfldsj gwq rew tqweruoweurwe -------------------------------------------------------------------------------- /input/smaple13.xlsx: -------------------------------------------------------------------------------- 1 | hahahaha 2 | jdsfkjsdafj 3 | xcnvkds 4 | weuroiuewqo 5 | xcnvkjhdsf 6 | iweuroewqu 7 | dfjlfgdf 8 | cb 9 | cbfdgter 10 | erterw 11 | c 12 | cvh 13 | a 14 | wer 15 | werewfdgfd 16 | d 17 | gryter 18 | wyrte 19 | y 20 | sfg 21 | erwt 22 | ewgds 23 | fbv 24 | dsbds 25 | t 26 | re 27 | wy 28 | fhg 29 | fdh 30 | dsf 31 | hsdjfldsj 32 | gwq 33 | rew 34 | tqweruoweurwe 35 | -------------------------------------------------------------------------------- /myShell.sh: -------------------------------------------------------------------------------- 1 | file_process(){ 2 | echo $1 # file name 3 | remain_entries="" 4 | while IFS= read -r entry; do 5 | while IFS= read -r line; do 6 | if [ "$entry" == "$line" ]; then 7 | remain_entries=${remain_entries}$entry$'\r' 8 | continue 2 9 | fi 10 | done <"$2" 11 | echo "$entry" >> $2 12 | done <"$1" 13 | echo "$remain_entries" > $1 14 | } 15 | 16 | process_decade(){ 17 | echo $1 # 10 file names 18 | timestamp=`date "+%Y-%m-%d:%H-%M-%S"` 19 | outputFile="output/results-$timestamp-$RANDOM.txt" 20 | echo -n > $outputFile 21 | 22 | # printf "%s\n" $1 | xargs -n 1 -I {} bash -c 'file_process "$@"' _ input/{} $outputFile 23 | printf "%s\n" $1 | xargs -n 1 -I {} bash -c 'file_process "$@"' _ {} $outputFile 24 | return 0 25 | } 26 | 27 | export -f process_decade 28 | export -f file_process 29 | # ls ./input | xargs -n10 | xargs -I {} bash -c 'process_decade "$@"' _ {} 30 | find ./input -type f \( -name "*.xlsx" -o -name "*.avro" \) | xargs -n10 | xargs -I {} bash -c 'process_decade "$@"' _ {} 31 | exit 0 -------------------------------------------------------------------------------- /myShell_backup.sh: -------------------------------------------------------------------------------- 1 | file_process(){ 2 | echo $1 # file name 3 | remain_entries="" 4 | while IFS= read -r entry; do 5 | # echo "$entry" 6 | while IFS= read -r line; do 7 | if [ "$entry" == "$line" ]; then 8 | remain_entries=${remain_entries}$entry$'\r' 9 | continue 2 10 | fi 11 | done <"$2" 12 | echo "$entry" >> $2 13 | done <"$1" 14 | echo "$remain_entries" > $1 15 | } 16 | 17 | # echo_var(){ 18 | # echo $1 19 | # echo $2 20 | # echo "happy" 21 | # return 0 22 | # } 23 | 24 | process_decade(){ 25 | echo $1 # 10 file names 26 | timestamp=`date "+%Y-%m-%d:%H-%M-%S"` 27 | outputFile="output/results-$timestamp-$RANDOM.txt" 28 | 29 | printf "%s\n" $1 | xargs -n 1 -I {} bash -c 'file_process "$@"' _ input/{} $outputFile 30 | # wait 31 | # echo "decade done" 32 | return 0 33 | } 34 | 35 | export -f process_decade 36 | export -f file_process 37 | # export -f echo_var 38 | ls ./input | xargs -n4 | xargs -I {} bash -c 'process_decade "$@"' _ {} 39 | exit 0 40 | # timestamp=`date "+%Y-%m-%d:%H-%M-%S"` 41 | # outputFile="output/results-$timestamp-$RANDOM.txt" 42 | # echo $timestamp 43 | # echo $outputFile -------------------------------------------------------------------------------- /script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # while read line 3 | # do 4 | # name=$line 5 | # echo "Text read from file - $name" 6 | # done < $1 7 | 8 | inputFolder="input" 9 | outputFile="output/results.txt" 10 | g=4 11 | 12 | file_arr=() 13 | 14 | file_process(){ 15 | echo $1 16 | remain_entries="" 17 | while IFS= read -r entry; do 18 | # echo "$entry" 19 | while IFS= read -r line; do 20 | if [ "$entry" == "$line" ]; then 21 | remain_entries=${remain_entries}$entry$'\r' 22 | continue 2 23 | fi 24 | done <"$2" 25 | echo "$entry" >> $2 26 | done <"$1" 27 | echo "$remain_entries" > $1 28 | } 29 | 30 | for file in $inputFolder/*; do 31 | # echo "$(basename "$file")" 32 | # echo "$file" 33 | # while IFS= read -r line; do 34 | # echo "$line" >> $outputFile 35 | # done <"$file" 36 | file_arr+=($file) 37 | done 38 | 39 | for ((i=0; i < ${#file_arr[@]}; i+=g)); do 40 | # group of 10 files 41 | decade=( "${file_arr[@]:i:g}" ) 42 | for file in ${decade[@]}; do 43 | file_process $file $outputFile & 44 | done 45 | done 46 | 47 | wait 48 | echo "All done" 49 | 50 | # echo_var(){ 51 | # echo $1 52 | # echo "printed" 53 | # return 0 54 | # } 55 | 56 | # export -f echo_var 57 | # # seq -f "n%04g" 1 100 |xargs -n 1 -P 10 -i echo_var {} 58 | # # seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {} 59 | # ls ./input | xargs -n4 | xargs -I {} bash -c 'echo_var "$@"' _ {} 60 | # exit 0 61 | 62 | 63 | 64 | # array=`ls ./input` 65 | # # echo "${array[@]}"|xargs -n4 66 | # decades=`"${array[@]}"|xargs -n4` 67 | 68 | # echo $decades 69 | 70 | # file_decade_arr=`ls ./input||xargs -n4` 71 | # for file_decade in $file_decade_arr; do 72 | # echo $file_decade 73 | # done 74 | 75 | # echo $file_decade_arr 76 | # g=4 77 | # for((i=0; i < ${#array[@]}; i+=g)) 78 | # do 79 | # part=( ${array[@]:i:g} ) 80 | # echo "${#part[@]}" 81 | # done 82 | 83 | # myfunc() 84 | # { 85 | # echo "I was called as : $@" 86 | # echo "You were called as : $1" 87 | # echo "he was called as : $2" 88 | # x=2 89 | # } 90 | 91 | # ### Main script starts here 92 | 93 | # echo "Script was called with $@" 94 | # x=1 95 | # echo "x is $x" 96 | # myfunc I You He 97 | # echo "x is $x" 98 | --------------------------------------------------------------------------------