У меня есть 10000 файлов в каталоге. Я хотел бы стереть строки, чтобы в заголовке оставалось 2 строки, сзади - 2 строки, а посередине - каждая сотая.

Например:

#header1
#header2
0     x y
1     x y
...
100   x y
101   x y
...
80000 x y
#tail1
#tail2

должен стать

#header1
#header2
0     x y
100   x y
200   x y
...
80000 x y
#tail1
#tail2

Какой самый эффективный и простой способ сделать это? У меня есть около 20 каталогов с 10000 таких файлов различной длины, которые я должен обрезать.

1 ответ1

0

Как прокомментировано, awk - хороший выбор для этого. Если это одноразовая задача, я бы не стал больше беспокоиться, чем создать сценарий на основе awk, который записывает сжатый файл из полного файла, взятого из его параметра, и вызывает его из команды find ... -exec .... подобно

cat $HOME/bin/shrinkit.sh
#!/bin/sh

awk '/^#/ && headcnt<2  {print; ++headcnt}; $1~/^[0-9]+$/ { if(!(cnt%100)) {print}; ++cnt}; cnt && /^#/ && tailcnt<2  {print; ++tailcnt}' "$1" >"$1.tmp"  && mv "$1.tmp" "$1"


cd $workdir
find . -type f -exec $HOME/bin/shrinkit.sh {} \;

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .