Eu tenho uma coluna, com algumas palavras:
scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
WWWWWWWW
superman
scatman
batman
superman
scatman
Eu deveria fazer alguns padrões, onde preciso ter três palavras palavra por palavra: scatman, batman, superman. Onde eu tiver palavras repetidas, como scatman & scatman nas linhas 4 e 5 ou onde tiver outras palavras, devo cortá-las que escrevi:
grep "scatman\|batman\|superman" file
Ok, rejeitei a palavra WWWWWWWW, mas não consigo entender como mostrar minha coluna palavra por palavra. Eu tenho como resultado:
scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
Nas linhas 4 e 5, repito palavras, mas não gosto disso. Onde eu tenho o erro?
Responder1
Isso fará exatamente como você deseja
#!/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
Irá imprimir cada palavra em uma nova linha como esta:
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
ou em uma linha como esta:
scatman batman superman scatman batman superman scatman batman superman scatman batman superman scatman batman superman scatman
Responder2
Isso pode ser feito com grep
e 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
O grep -E
permite uma expressão regular estendida que permite usar |
como or
alvos de pesquisa. O awk
código procura palavras repetidas e as ignora.
Você pode fazer tudo isso em uma linha, se quiser:
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`
Responder3
pegando alguma coisa
Nas linhas 4 e 5 eu repito palavras, mas não gosto disso
para omitir linhas repetidas: adicione | uniq
no final do seu comando