특수한 패턴의 컬럼을 출력하는 방법

특수한 패턴의 컬럼을 출력하는 방법

몇 가지 단어가 포함된 칼럼이 있습니다.

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사용할 수 있는 확장 정규식을 허용합니다 . 코드 는 반복되는 단어를 찾아 건너뜁니다.|orawk

원하는 경우 이 모든 작업을 한 줄로 수행할 수 있습니다.

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명령 끝에 추가하세요.

관련 정보