フルテキスト行を表示するには?

フルテキスト行を表示するには?

私の情報の例:

Fruit,Quantity:Cost,Sold
Red Apple,10,1,5
Green Apple,10,2,20
Orange,20,1,10

これは私のコードです。

if      [ "$fruit != $blank" ] && [ "$quantity" == "$blank" ]; then
        cut -d\, -f1 information.txt | grep $fruit
elif    [ "$quantity != $blank" ] && [ "$fruit" == "$blank" ]; then
        cut -d\, -f2 information.txt | grep $quantity 

私のコードは希望の検索のみを表示するので、「りんご」と入力すると「赤いりんご」と「緑のりんご」だけが表示され、数量は表示されません。すべての情報を表示するにはどうすればよいですか?数量と同じように「20」と入力すると、「20」のみが表示されます。

ベストアンサー1

あなたcutが提供した入力から探している情報を効果的に削除していますgrep。のみ使用

grep "^[^,]*$fruit[^,]*" information.txt

変える

cut -d\, -f1 information.txt | grep $fruit

そして

grep "^[^,]*,$quantity$" information.txt

変える

cut -d\, -f2 information.txt | grep $quantity

興味のある行をフィルタリングします。正規表現:

  • ^行の先頭から一致します。

  • [^,]*,コンマ()を含まないすべての文字列と一致します。

  • $fruit環境変数に含まれる文字列を一致させますfruit

  • [^,]*この時点で別のものが明らかになるはずです。

データにフィールドを追加すると、正規表現を変更する必要があります。この場合、これに関するチュートリアルが役に立ちます。構文はgrep(1)マニュアルページにあります(例:man grep使用)。

主張しcutて入力内容が並べ替えられている場合は、次の情報を使用して情報を再挿入できますjoin(最初の場合)。

inf=information.txt
cut -d, -f1 $inf | grep "$fruit" | sort -u | join -t, -j 1 - $inf
  • cut-f1名前が環境変数()に含まれるファイルの最初のフィールドを出力します。infここで、フィールドは-d,コンマ()で区切られます。

  • grep探す;

  • sort重複した項目の並べ替えと削除(-u);

  • join標準入力(-最後の引数の横のin)の行を最後の引数として指定されたファイルの内容に関連付けます。カンマをフィールド区切り記号()として使用し、-t,同じ最初のフィールド(-j 1)を持つ行を連結します。

照合順序の要件はjoin(coreutilsパッケージ内の1つ以上)で発生します。ソートされていないデータがどれだけの問題を抱えているかを確認していません。

おすすめ記事