grep -f filter.txt data.txt
становится неуправляемым, когда filter.txt
превышает пару тысяч строк и, следовательно, не является лучшим выбором для такой ситуации. Даже при использовании grep -f
нам нужно помнить несколько вещей:
-x
, если необходимо сопоставить всю строку во втором файле -F
, если в первом файле есть строки, а не шаблоны -w
для предотвращения частичных совпадений, не используя опцию -x
обсуждение этой темы (grep -f
для больших файлов):
И этот пост рассказывает о grep -vf
:
В итоге лучший способ обработки grep -f
для больших файлов:
Соответствие всей строке:
awk 'FNR==NR {hash[[110]]; next} [110] in hash' filter.txt data.txt > matching.txt
Соответствие определенному полю во втором файле (с использованием разделителя ',' и поле 2 в этом примере):
awk -F, 'FNR==NR {hash[$1]; next} $2 in hash' filter.txt data.txt > matching.txt
и для grep -vf
:
Соответствует всей строке:
awk 'FNR==NR {hash[[112]]; next} !([112] in hash)' filter.txt data.txt > not_matching.txt
Соответствует a конкретное поле в второй файл (используя разделитель ',' и поле 2 в этом примере):
awk -F, 'FNR==NR {hash[[113]]; next} !($2 in hash)' filter.txt data.txt > not_matching.txt
В случае, если у Вас есть Модель в Вашем Компоненте, который содержит объект со значениями, к которым Вы хотите получить доступ от своих заполнителей как замены, можно записать:
new StringResourceModel("salutation.text", getModel());
Позволяют нам вообразить getModel()
, тип возврата IModel<User>
, и User
содержит поля как firstName
и lastName
. В этом случае можно легко получить доступ firstName
и lastName
поля в строке свойства:
salutation.text=Hej ${firstName} ${lastName}, have a nice day!
Дополнительная информация можно найти здесь: https://ci.apache.org/projects/wicket/apidocs/8.x/org/apache/wicket/model/StringResourceModel.html#StringResourceModel-java.lan g. Строка-org.apache.wicket.model. IModel-