У меня 30-гигабайтный образ диска с разделенным на части разделом (думаю dd if=/dev/sda1 of=diskimage
), из которого мне нужно восстановить некоторые текстовые файлы. Инструменты для вырезания данных, например, foremost
работают только с файлами с четко определенными заголовками, то есть не с простыми текстовыми файлами, поэтому я остановился на своем хорошем друге strings
.
strings diskimage > diskstrings.txt
создал 3-гигабайтный текстовый файл, содержащий кучу строк, в основном бесполезных, смешанных с текстом, который я на самом деле хочу.
Большая часть хутора имеет тенденцию быть действительно длинными, непрерывными рядами тарабарщины. Вещи, которые меня интересуют, гарантированно будут меньше 16 КБ, поэтому я собираюсь отфильтровать файл по длине строки. Вот скрипт Python, который я использую для этого:
infile = open ("infile.txt" ,"r");
outfile = open ("outfile.txt","w");
for line in infile:
if len(line) < 16384:
outfile.write(line)
infile.close()
outfile.close()
Это работает, но для дальнейшего использования: существуют ли магические заклинания в одну строку (думаю awk
, sed
), которые бы фильтровали файл по длине строки?
awk 'length($0) < 16384' file > output
, так как действие по умолчанию - печать строки.Это похоже на ответ Ансгара, но немного быстрее в моих тестах:
Это та же скорость, что и другие ответы awk. Он опирается на неявное
print
истинное выражение, но не требует времени, чтобы разделить линию, как это делает Ансгар.Обратите внимание, что AWK дает вам
if
бесплатно. Команда выше эквивалентна:Нет явного
if
(или окружающего его набора фигурных скобок), как в некоторых других ответах.Вот способ сделать это в
sed
:или:
которые удаляют любую строку, содержащую 16384 (или более) символов.
Для полноты, вот как бы вы использовали,
sed
чтобы сохранить строки длиннее порога:источник
Вы можете
awk
такие как:Это напечатает строки длиннее 16K символов (16 * 1024).
Вы также можете использовать
grep
:Это напечатает строки не более 16K символов.
источник
grep
это хорошая идея - это, конечно, простое регулярное выражение, но дороже в вычислительном отношении, чемawk
. «Человек с проблемой говорит:« Я буду использовать регулярные выражения! »Теперь у него две проблемы». ;)awk
.Не очень отличается от уже полученных ответов, но все же короче:
источник