私の情報の例:
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つ以上)で発生します。ソートされていないデータがどれだけの問題を抱えているかを確認していません。