Прежде всего, предполагая, что строки cleaned1
должны совпадать со всей строкой в cleanedR
, вы можете извлечь выгоду из использования grep -x
.
С таким же предположением, если вам удастся отсортировать два огромных файла cleaned1
и cleanedR
, вы можете заменить grep
на comm -1 -3 cleaned1 cleanedR
, что будет довольно быстро.
В противном случае вы можете разделить cleaned1
(, например.split -l 100000
)и оперировать порциями. Вы даже можете связать эти greps (, т.е. grep -Fvxf chunk1 cleanedR | grep -Fvxf chunk2 |... > cleaned2
), и, таким образом, распараллелить несколько процессоров.
Я не знаю, лучше ли парсить html так, как вы пытаетесь, но в любом случае это работает, если у вас есть разрывы строк, если их нет, вы можете удалить часть tr:
cat yourFile.html | tr -d '\n' | awk -F'<td id="latest_button">' '{print $2}' | cut -c -50
Таким образом, tr избавится от разрывов строк, чтобы рассматривать все как одну строку строки.
awk -F устанавливает разделитель в тег, печатает $2, печатает часть после разделителя
и cut -c -50 печатает только первые 50 символов
Я обычно использую grep -o для этого:
grep -o '<td id="latest_button">..................................................'
Или в расширенном режиме:
grep -E -o '<td id="latest_button">.{50}'
Конечно, вы также получаете сам тег.