さまざまなサイズの文字列を比較するのに役立ちます。

さまざまなサイズの文字列を比較するのに役立ちます。

ロープが2本ありますがサイズが異なります。

地域都市のインポート各市民が住んでいる都市の名前を返します。

地域看護師を入手CS が前に来る各看護師が働く都市名を返します。

GetLocalCit=$(awk -F "[:]" '{print $4}' citizens.txt)
GetLocalNurse=$(awk -F "[:]" '{print $3}' nurses.txt)

出力地域都市のインポート例:

Lisboa
Santarem
Porto
Porto
Lisboa
Braga
Braganca
Setubal
Setubal
Porto
Leiria
Santarem
Porto
Lisboa

出力地域看護師を入手例:

CSLisboa
CSPorto
CSSantarem
CSSetubal
CSLeiria
CSBraga
CSBraganca
CSBeja
CSEvora
CSFaro
 CSCoina 
 CSMarvao 
CSTrasOM
CSTrs
CSAA
CSAB
CSAC
CSAD
CSAE
CSAF

やりたいことはそれぞれを比較することですその他都市名の由来は地域都市のインポート各都市名とともに地域看護師を入手一致するものが見つかった場合(つまり、都市名はすでに地域看護師を入手)、それから「この街に看護師がいます」とエコーします。

私はこれをオンラインで見つけて、これのバリエーションを実装しようとしました。

#!/bin/bash

STR='GNU/Linux is an operating system'
SUB='Linux'
if [[ "$STR" == *"$SUB"* ]]; then
  echo "It's there."
fi

私のコードでは、 '\ n'で区切られた2つの文字列に複数の単語があるため、機能しない可能性があります...

私も作ろうと思いました。しかし、繰り返しますが、文字列を使用して正しく実装する方法がわかりません!

答え1

grep私の考えでは、あなたが使用する方が良いと思います。地域都市のインポート検索文字列のリスト:

 grep -f GetLocalCit GetLocalNurse

またはファイル以外のコマンドの場合

 grep -f <(GetLocalCit)  <(GetLocalNurse)

次を返します。

CSLisboa
CSPorto
CSSantarem
CSSetubal
CSLeiria
CSBraga
CSBraganca
 

その後、sedを介してこのリストを使用できます。

grep -f GetLocalCit GetLocalNurse | sed 's/CS/There is already a nurse in /' 

ついに得た:

There is already a nurse in Lisboa
There is already a nurse in Porto
There is already a nurse in Santarem
There is already a nurse in Setubal
There is already a nurse in Leiria
There is already a nurse in Braga
There is already a nurse in Braganca

これが都市の重複を排除する方法に注意してください地域都市のインポート


次に、ソースコードの例を見てみましょう。

次の2つのリストを繰り返す必要があります。ここにファイルがあるとします。

for city in $(cat GetLocalCit) ; do
  for nurse in $(cat GetLocalNurse) ; do
    if [[ $nurse =~ $city ]] ; then
       echo "Nurse found in $city."
    fi
  done
done

ネストされたループの使用はそれほど効率的ではないかもしれませんbash

Nurse found in Lisboa.
Nurse found in Santarem.
Nurse found in Porto.
Nurse found in Porto.
Nurse found in Lisboa.
Nurse found in Braga.
Nurse found in Braga.
Nurse found in Braganca.
Nurse found in Setubal.
Nurse found in Setubal.
Nurse found in Porto.
Nurse found in Leiria.
Nurse found in Santarem.
Nurse found in Porto.
Nurse found in Lisboa.

すべての重複を維持します。

答え2

comm -12 <(GetLocalCit | sort -u) <(GetLocalNurse | cut -c3- | sort -u) |
    sed -E 's/^/There is a nurse in /'

There is a nurse in Braga
There is a nurse in Braganca
There is a nurse in Leiria
There is a nurse in Lisboa
There is a nurse in Porto
There is a nurse in Santarem
There is a nurse in Setubal

commこれは、ソートされたファイルのペアで共通の行を識別するために使用されます。

関連情報