Как вывести столбец со специальными шаблонами

Как вывести столбец со специальными шаблонами

У меня есть колонка с некоторыми словами:

scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
WWWWWWWW
superman
scatman
batman
superman
scatman

Мне нужно сделать несколько шаблонов, где мне нужно слово за словом три слова: scatman, batman, superman. Где у меня есть повторяющиеся слова, как scatman и scatman на строке 4 и 5 или где у меня есть другие слова, я должен их вырезать Я написал:

grep "scatman\|batman\|superman" file

Хорошо, я отклонил слово WWWWWWWW, но не могу понять, как отобразить мой столбец слово за словом. В результате у меня:

scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman

В строке 4 и 5 у меня повторяются слова, но мне это не нравится. Где у меня ошибка?

решение1

Это сделает именно то, что вы хотите.

#!/bin/bash
array=(
[0]="scatman"
[1]="batman"
[2]="superman"
)
count=0
while read line; do
    for i in "${array[@]}";
    do
    if [[ $count == 3  ]]; then
    count=0
    fi
    if [[ $line == ${array[$count]} ]]; then
    #echo "$line"
    printf "%s " $line

    # uncomment if you want every word on a new line
    #echo "$line" >> newfile.txt # each word on a line
    #or
    # uncomment if you want all will be on one line
    #printf "%s " $line >> newfile.txt

    count=$((count+1))
    else
    continue
    fi

    done

done < file.txt #this is your original file

Выведет каждое слово на новой строке следующим образом:

scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman

или в одну строку, например так:

scatman batman superman scatman batman superman scatman batman superman scatman batman superman scatman batman superman scatman

решение2

Это можно сделать с помощью grepи awk:

cat words.txt |
grep -E 'scatman|batman|superman' |
awk '{
      last_word = cur_word
      cur_word = $0
      if (cur_word == last_word)
        next
      else
        print $0
      }' < word.list 

Позволяет grep -Eиспользовать расширенное регулярное выражение, которое позволяет использовать его |в качестве orцелей поиска. awkКод ищет повторяющиеся слова и пропускает их.

Вы можете сделать все это в одной строке, если хотите:

cat words.txt | grep -E 'scatman|batman|superman' | awk '{ last_word = cur_word; cur_word = $0; if (cur_word == last_word) next; else print $0 }' < word.list`

решение3

grep что-то

В строке 4 и 5 у меня есть повторяющиеся слова, но мне это не нравится.

чтобы пропустить повторяющиеся строки: добавьте | uniqв конце команды

Связанный контент