Как я могу получить 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 в исходных аргументах именами, считанными из стандартного ввода. Кроме того, пробелы без кавычек не заканчивают элементы ввода; вместо этого разделителем является символ перевода строки.