У меня есть колонка с некоторыми словами:
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
в конце команды