Intereting Posts
Почему root всегда входит в систему с ttyS0 (даже после перезагрузки системы)? Как удалить файл на RAID-устройстве? Как настроить курсор xterm как идеальный квадрат? Как получить количество ссылок на файлы в папке с этими ссылками? Невозможно выполнить операции с файлами на устройстве MTP, установленном через GVFS: «Операция не поддерживается» Настройка цифрового пианино и компьютера с MIDI-интерфейсом sftp дает ошибку: «Получено сообщение слишком долго» и в чем причина? Хром не почитает резервные копии Fontconfig? Могу ли я установить его для этого? Или вручную укажите? Ubuntu + nginx, получить информацию о виртуальной машине Раскладка клавиатуры не изменяется в Chromium под Debian Установка альтернативных устройств (с различными вариантами крепления) в одной точке подключения Управление выходными потоками многих подпроцессов с взаимоблокировками iptables: как разрешить трафик с перенаправленного порта Безопасность на морском коньке Как использовать DD для клонирования раздела с образа диска?

Вырезать каждую 100-ю колонку из csv

У меня есть файл данных чисел, разделенных вкладками, например

1 2 3 4 2 4 6 8 

Мой реальный файл имеет ширину 50000, и мне нужен только каждый 100-й столбец (столбец 100, 200, 300, 400, …). Теперь я хотел бы удалить все остальные столбцы.

Как я могу это сделать?

Это то, что awk для:

 awk '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' file > output 

Или, если вы можете иметь пробелы внутри своих полей, укажите вкладку в качестве разделителя полей:

 awk -F'\t' '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' file > output 

Кроме того, вы можете использовать Perl:

 perl -ane 'for($i=99;$i<=$#F;$i+=100){print "$F[$i] "}' file > output 

Чтобы сделать это для нескольких файлов, вы можете использовать цикл оболочки (при условии, что вы хотите запустить его для всех файлов в текущем каталоге):

 for f in *; do awk '{for(i=100;i<=NF;i+=100){printf "%s ",$i;} print ""}' "$f" > "$f".new; done 

Хотя я не знаю, присвоено ли это большими файлами, вы можете сделать это с помощью cut :

 cut -d " " -f -100 < [your file]