Tengo una columna, con algunas palabras:
scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
WWWWWWWW
superman
scatman
batman
superman
scatman
Debería hacer algunos patrones, donde necesito tener palabra por palabra tres palabras: scatman, batman, superman. Donde tengo palabras repetidas, como scatman y scatman en las líneas 4 y 5 o donde tengo otras palabras, debo cortarlas. He escrito:
grep "scatman\|batman\|superman" file
Ok, he rechazado la palabra WWWWWWWW, pero no puedo entender cómo mostrar mi columna palabra por palabra. Tengo como resultado:
scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
En las líneas 4 y 5 tengo palabras repetidas, pero eso no me gusta. ¿Dónde tengo el error?
Respuesta1
Esto hará exactamente lo que quieras.
#!/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
Imprimirá cada palabra en una nueva línea como esta:
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
batman
superman
scatman
o en una línea como esta:
scatman batman superman scatman batman superman scatman batman superman scatman batman superman scatman batman superman scatman
Respuesta2
Esto se puede hacer con grep
y 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
Permite grep -E
una expresión regular extendida que le permite usarla |
como or
objetivo de búsqueda. El awk
código busca palabras repetidas y las omite.
Puedes hacer todo esto en una línea, si quieres:
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`
Respuesta3
greping algo
En las líneas 4 y 5 tengo palabras repetidas, pero eso no me gusta.
para omitir líneas repetidas: agregue | uniq
al final de su comando