몇 가지 단어가 포함된 칼럼이 있습니다.
scatman
batman
superman
scatman
scatman
batman
superman
scatman
scatman
batman
superman
scatman
batman
WWWWWWWW
superman
scatman
batman
superman
scatman
나는 몇 가지 패턴을 만들어야 하는데, 거기에는 scatman, batman, superman이라는 세 단어를 단어 단위로 입력해야 합니다. 4행과 5행에 scatman & scatman과 같이 반복되는 단어가 있거나 다른 단어가 있는 경우 잘라내야 합니다.
grep "scatman\|batman\|superman" file
좋아, 나는 WWWWWWWWW라는 단어를 거부했지만 내 열을 단어별로 표시하는 방법을 이해할 수 없습니다. 결과는 다음과 같습니다.
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
뭔가를 탐하다
4번째와 5번째 줄에 반복되는 단어가 있지만 마음에 들지 않습니다.
반복되는 줄을 생략하려면 | uniq
명령 끝에 추가하세요.