Bash Filter Array
Bash Filter Array
In Bash scripting, filtering an array is useful for various tasks that require extracting specific elements from an array based on certain conditions.
Syntax
filtered_array=()
for element in "${array[@]}"; do
if [ condition ]; then
filtered_array+=("$element")
fi
done
The basic syntax involves using a for
loop to iterate over the elements of the array and conditionally add elements to a new array.
Example Bash Filter Array
Let's look at some examples of how to filter an array in Bash:
1. Filter Array to Extract Even Numbers
This script initializes an array with numeric elements, filters the array to extract even numbers, and prints the filtered array.
#!/bin/bash
array=(1 2 3 4 5 6)
filtered_array=()
for element in "${array[@]}"; do
if (( element % 2 == 0 )); then
filtered_array+=("$element")
fi
done
echo "Filtered array (even numbers): ${filtered_array[@]}"
In this script, the array variable array
is initialized with the elements 1, 2, 3, 4, 5, and 6. The for
loop iterates over each element in the array, and the if
statement checks if the element is even. If true, the element is added to the filtered_array
variable. The script then prints the filtered array.
2. Filter Array to Extract Strings Containing a Specific Substring
This script initializes an array with string elements, filters the array to extract strings containing the substring 'apple', and prints the filtered array.
#!/bin/bash
array=("apple pie" "banana split" "apple tart" "cherry pie")
filtered_array=()
for element in "${array[@]}"; do
if [[ "$element" == *"apple"* ]]; then
filtered_array+=("$element")
fi
done
echo "Filtered array (strings containing 'apple'): ${filtered_array[@]}"
In this script, the array variable array
is initialized with the elements 'apple pie', 'banana split', 'apple tart', and 'cherry pie'. The for
loop iterates over each element in the array, and the if
statement checks if the element contains the substring 'apple'. If true, the element is added to the filtered_array
variable. The script then prints the filtered array.
3. Filter Array with Elements from User Input
This script initializes an array with elements from user input, filters the array based on user-specified conditions, and prints the filtered array.
#!/bin/bash
array=()
while true; do
read -p "Enter an element (or 'done' to finish): " element
if [ "$element" == "done" ]; then
break
fi
array+=("$element")
done
read -p "Enter the substring to filter by: " substring
filtered_array=()
for element in "${array[@]}"; do
if [[ "$element" == *"$substring"* ]]; then
filtered_array+=("$element")
fi
done
echo "Filtered array (strings containing '$substring'): ${filtered_array[@]}"
In this script, the array variable array
is initialized as an empty array using ()
. The user is prompted to enter elements, which are added to the array using the +=
operator. When the user types 'done', the loop exits. The user is then prompted to enter a substring to filter by. The for
loop iterates over each element in the array, and the if
statement checks if the element contains the specified substring. If true, the element is added to the filtered_array
variable. The script then prints the filtered array.
Conclusion
Filtering an array in Bash is a fundamental task for extracting specific elements from an array based on certain conditions in shell scripting. Understanding how to filter arrays can help you manage and manipulate arrays effectively in your scripts.