我有一个专栏,里面有几句话:
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
好的,我已拒绝单词 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
查找某些内容
在第 4 行和第 5 行,我有重复的单词,但我不喜欢这样
省略重复的行:| uniq
在命令末尾添加