次の情報を含む単純なtxtファイルがあります。
"John;23124;Firefighter;[email protected]"
"Hannah;34241;Hairdresser;[email protected]"
私が望むのは、与えられたパラメータを比較してifステートメントを表現し、そのパラメータがファイルテキストのどの行に等しいかを確認することです。たとえば(「ジョン」23124「ファイアマン」)[Eメール保護]")は私が提供する引数であり、ファイルの最初の行と一致します。
試してみましたが、if[(cat filename.txt | grep $2 | wc -l) - gt 0]
うまくいかないようです。
ベストアンサー1
完了に使用できますawk
。
ファイルがで区切られている場合は、パラメータを追加する必要が;
あります-F ';'
。
cat yourfile | awk -F ';' '{print ($2>30000)? "foo" : "bar"}'
bar
1行目(パラメータが低すぎる)
とfoo
2行目を印刷します。
存在することを確認するには、$2
次の手順を実行します。
cat yourfile | awk -F ';' '{print $2? "foo" : "bar"}'
特定のパターンがある行数を知りたい場合は、次のようにします。
cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l
その後、次の条件で使用できます。
[ $(cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l) -gt 2 ] \
&& echo "at least 2 matches" \
|| echo "less than 2 matches"
if
またはステートメントを好む場合:
if [ $(cat yourfile | awk -F ';' '{printf("%s", $2? "foo\n" : "")}' | wc -l) -gt 2 ];
then
echo "at least 2 matches"
else
echo "less than 2 matches";
fi