Столбец усечения Unix в файле csv

Двоичные файлы обычно создаются для широкого диапазона разделяемых библиотек, с определенным путем и другими параметрами конфигурации, уникальными для каждого дистрибутива. Маловероятно, что двоичные файлы из одного дистрибутива будут просто работать в другом, если только они не будут очень простыми и самодостаточными.

Обычно вы берете исходные файлы и собираете их в Arch Linux, используя для этого любой стандартный процесс, который есть в Arch Linux.

Вы можете сделать это разово, поэтому загрузите исходный код и используйте различные утилиты ( configure , make , gcc и т. Д.) для его сборки, или вы можете использовать Arch Build System , который является стандартным способом создания новых пакетов для Arch с нуля.

5
29.12.2016, 18:12
2 ответа

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

$ awk -F "," 'BEGIN { OFS = FS } NR > 1 { $5 = substr($5,1,5) } { print }' data.csv

Флаг -F устанавливает разделитель входного поля, а блок BEGIN устанавливает разделитель выходного поля в соответствии с разделителем входного поля (запятая ).

Если порядковый номер текущей записи ( NR ) больше единицы (т. Е. Мы передали строку заголовка), то функция substr () усечет пятое поле (столбец) не более пяти символов. Это позволяет избежать изменения первой строки входных данных.

Единственная печать выведет (возможно) измененную запись (строку) на стандартный вывод.

5
27.01.2020, 20:32

Если ваш файл действительно такой же простой, как ваш пример, вы можете выполнить одно из следующих действий:

  • awk

     $ awk -F, -vOFS = , 'NR> 1 {$ 5 = substr ($ 5,1,5)} 1' файл 
    test1, test2, test3, test4, test10, test11, test12, test17 
    rh, mbn, ccc , khj, ee3 e, a2,3, u 
    hyt, bb, mb, khj, R ee3, a, 5, r 
    mbn, htr, ccc, fdf, F1ee, a, e , r 
     

    Пояснение

    -F, устанавливает разделитель входных полей на , , а -vOFS =, устанавливает переменная OFS (разделитель выходных полей) на , . NR - это номер текущей строки, поэтому приведенный выше сценарий изменит 5-е поле на 5-символьную подстроку самого себя. Одинокий 1 - это сокращение от awk для «распечатать эту строку».

  • perl

     $ perl -F, -lane '$ F [4] = ~ s / (. {5}). * / $ 1 / if $.> 1; print join ",", @F 'файл 
    test1, test2, test3, test4, test10, test11, test12, test17 
    rh, mbn, ccc, khj, ee3 e, a2,3, u 
    hyt, bb, mb, khj, R ee3, a, 5, r 
    mbn, htr, ccc, fdf, F1ee, a, e, r 
     

    Объяснение

    -a заставляет perl действовать как awk и разбивать свои входные строки на символ, заданный -F , и сохраняет их как элементы массива @F . Затем мы удаляем все, кроме первых 5 символов 5-го поля (они начинают отсчет с 0 ), а затем печатаем результирующий массив @F , соединенный запятыми.

  • sed

     $ sed -E '1! S / (([^,] +,) {4} [^,] {5,5}) [^,] *, / \ 1, /' файл 
    test1, test2, test3, test4, test10, test11, test12, test17 
    rh, mbn, ccc, khj, ee3 e, a2,3, u 
    hyt, bb , mb, khj, R ee3, a, 5, r 
    mbn, htr, ccc, fdf, F1ee, a, e, r 
     

    Пояснение

    Это оператор подстановки общий формат которого - s / original.replacement / . 1! означает «не делайте этого для 1-й строки». Регулярное выражение соответствует набору не- , , за которым следует , 4 раза ( ([^,] +,) {4} ), затем любой 5 символов, отличных от , ( [^,] {5} ) - это первые 5 из 5-го поля, а затем любые другие символы до конца поля ( [^,] +, ). Все это заменяется первой частью строки, эффективно усекая поле.

12
27.01.2020, 20:32

Теги

Похожие вопросы