Как я могу получить 10 первых строк всех моих сжатых файлов?

У меня есть куча M файлы, из которых я хочу извлечь первый N линии (от каждой). Мои файлы сжаты в BZ2. В противном случае, делая head -10 * было бы достаточно.

Пример: Предположим, я хочу извлечь 2 первые строки из всех моих файлов (A.txt, B.txt, C.txt внизу).

a.txt:

1A
2A
3A
4A

b.txt:

1B

C.txt:

1C
2C

Ожидаемый результат должен быть примерно таким (т. Е. Содержать эти строки, не обязательно в порядке):

1A
2A
1B
1C
2C

Я попробовал следующее:

  • bzcat * | head -10 дает мне первые 10 строк всей распакованной группы файлов, то есть не хватает вывода. Я бы только 1A 2A Вот.
  • bzcat | head -10 * дает мне первые 10 строк каждого сжатого файла, т.е. невозможно прочитать.

У кого-нибудь есть идея?

2 ответа

Решение

Использовать for цикл:

for i in *; do bzcat "$i" | head -n10; done

или же find:

find -type f -exec bash -c 'bzcat $1 | head -n10' _ {} \;

Использование xargs:

find . -name "*" | xargs -I {} sh -c "bzcat {} | head -n10"

xargs -I заменяю-str:

Заменить вхождения replace-str в исходных аргументах именами, считанными из стандартного ввода. Кроме того, пробелы без кавычек не заканчивают элементы ввода; вместо этого разделителем является символ перевода строки.

Другие вопросы по тегам