文字列を取得して配列の出力を比較し、同じであることを確認するスクリプト

文字列を取得して配列の出力を比較し、同じであることを確認するスクリプト

次のような複数行のテキストファイルがあります。

djfldfjd:lisa
ldj:roma
dkjdkjflddlsdkjdlkj:kathy
ldadkjfdsldkjdlkfjdlkkkkkkkkkkkkkkkkkkkkl:purple
dkjdljl:christine
kdllkldkjhhhhhhhhhhhhhhh:george
ldkjfdl:kathy

ここで必要なのは、上記のテキストファイルのすべての行を処理し、コロンの後に現れる文字列を比較し、コロンの後に繰り返される文字列を取得し、その文字列をコロンの前に印刷するスクリプトです。

だから私は以下のスクリプトを試してみましたが、以下のエラーが発生しました。

#!/usr/bin/sh

input="test.txt"

cat $input | while read line; do output= $(echo $line | cut -d":" -f2);  done

for (( i = 0 ; i < "${#output[@]}" ; i++ ))
{
      echo ${output[i]}
}

エラーメッセージ: ./compare.sh: line 11: test1: command not found

どんな助けでも大変感謝します。ありがとうございます。

ベストアンサー1

スクリプトはsh構文を使用しません。 kshとzshの構文が混在しているようです。基本的な構文チェックには、shellcheck(オンラインで利用可能またはシステムにインストールできるスタンドアロンユーティリティとして利用可能)を使用できます。

しかし、とにかくテキストを処理するにはシェルループを使用したくありません。

むしろ、テキスト処理ツールを使用することをお勧めします。ここで、固定区切り文字を含むフィールドに書式設定されたテキストの場合は、次のようになりますawk

#! /usr/bin/sh -
input=test.txt
awk -F: '
  second_pass {if (count[$2] > 1) print $1; next}
              {count[$2]++}' "$input" second_pass=1 "$input"

おすすめ記事