如何輸出具有特殊圖案的列

如何輸出具有特殊圖案的列

我有一個專欄,有些話:

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在命令末尾添加

相關內容