文字列リスト全体で区切る方法

文字列リスト全体で区切る方法

生成され変数に追加される文字列のリストが2つあります。$t次に$nnpp、commコマンドを使用して比較します。

pcr=$(comm -13 <(echo “$t” | sort) <(echo “$nnpp” | sort))

その後、差分をベースファイルに追加して並べ替えます。

psl=$(sort <(echo $t) <(echo $pcr) | uniq)

今、私が作成した新しいリストを繰り返そうとすると、リストは$psl1つとして扱われ、最初の繰り返しからすべてを取得します。繰り返すためにどのように分離できますか?

私は成功せずにこれを試しました。

for e in “${psl[@]}”
then
     echo $e
done

気になる方のためにスクリプトの始めにもこの内容があります。

IFS=$’\n’
IFS=$’\t’

ベストアンサー1

あなたが経験している問題のいくつかは、行に引用符がないことで内容が$t1行になり、多くの単語を含む2つの長い行に$pcrなることです。psl

psl=$(sort <(echo $t) <(echo $pcr) | uniq)

簡単な最初の修正は次のとおりです。

psl=$(sort <(echo "$t") <(echo "$pcr") | uniq)

しかし、その後、行ごとに繰り返す必要があります。 (と同じツールを$psl使用しているので、行ごとに処理するとします。)sortuniqcomm

while read -r e ; do
    echo "$e"
done <<<"$psl"

一時ファイルを使用すると、実際にははるかに簡単になります。

echo "$t" | sort >t.sorted
echo "$nnpp" | sort >nnpp.sorted
comm -13 t.sorted nnpp.sorted >pcr
sort t.sorted pcr | uniq >psl
while read -r e ; do
    echo "$e"
done <psl

ちなみに、pcr単に一意の行があり、それをnnpp使用すると、uniq間の重複を排除する必要があるため、より簡単なアプローチを使用できます。tnnpp

echo "$t" >t
echo "$nnpp" >nnpp
sort -u -o psl t nnpp

sortフラグは-upipingと同じで、ソートされた出力を書き込むファイル名を指定するフラグを渡すuniqことができます。sort-o

おすすめ記事