Назад | Перейти на главную страницу

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

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

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

Я должен сделать несколько шаблонов, где мне нужно дословно соединить три слова: Скэтмен, Бэтмен, Супермен. Если у меня есть повторяющиеся слова, такие как 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 у меня есть повторяющиеся слова, но мне это не нравится. Где у меня ошибка?

Это можно сделать с помощью 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`

Это будет делать именно то, что вы хотите

#!/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