GREP с использованием значений массива и сделать его быстрее

Вы можете попробовать установить и использовать grub-customizer

Чтобы установить grub-customizer:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer

sudo apt-get update

sudo apt-get install grub-customizer

Чтобы запустить его, просто введите sudo grub-customizer

Если вы видите диспетчер загрузки Windows, попробуйте вверх по списку.

Подробнее здесь: http://linuxg.net/how-to-install-grub-customizer-4-0-6-on-ubuntu-linux-mint-elementary-os -and-их-производные-системы /

1
29.11.2018, 15:41
2 ответа

Вы можете использовать grep с опцией шаблона файла (-f)

Пример:

$ echo -e "apple\nsony\nsamsung" > file_pattern
$ grep -f file_pattern your.csv

РЕДАКТИРОВАТЬ :В ответ на ваши новые ограничения:

sed 's/^/\^/g' $itemsFile > /tmp/pattern_file
while IFS=$';' read -r -a array
do
    echo ${array[1]} | grep -q -f /tmp/pattern_file.txt
    if [ $? -eq 0 ]; then 
        # here I do something with ${array[2]}, ${array[4]} line by line and so on, 
        # so I can't match the whole file $file_in at once but online line by line.
    fi
done < $file_in
2
27.01.2020, 23:23

В вашем скрипте две ошибки:

  • grep пытается сопоставить строку $itemToFind, потому что вы поместили ее между одинарными кавычками '. Вместо этого используйте двойную кавычку -.

  • вы используете массив из индекса 1, а help readговорит, что он начинается с нуля.

Это должно дать это:

while IFS=$';' read -r -a array
do
    mapfile -t arrayItems < $itemsFile
    ## now loop through the above array
    for itemToFind in "${arrayItems[@]}"
    do
       itemFound=""
       itemFound=$(echo ${array[0]} | grep -o "$itemToFind")
       if [ -n "$itemFound" ] 
       then 
          echo $itemFound 
          # so end to search in case the item is found
          break
       fi
    done
done < $file_in

РЕДАКТИРОВАТЬ:

Если вы хотите сделать это быстрее, вы можете использовать расширенные регулярные выражения:

grep -E 'apple|sony|samsung' $file_in

И если вы хотите отображать только бренды:

grep -E 'apple|sony|samsung' $file_in | awk '{print $1}'
1
27.01.2020, 23:23

Теги

Похожие вопросы