обратный порядок в csv

У меня есть файл CSV, например:

input.csv 1,2,3,10 4,5,6 7,8,9,12,28,30 

Я хочу изменить столбцы в этом файле, что означает:

 output.csv 10,3,2,1 6,5,4 30,28,12,9,8,7 

Я знаю, как это сделать для фиксированного количества столбцов, но если количество столбцов меняется, что мне делать?

  • Возьмите информацию из CSV-файла и добавьте его после определенного шаблона
  • два файла .csv сравниваются с помощью awk
  • строка обновления на основе предыдущей строки
  • Поиск данных из всех файлов в папке
  • печатать дубликаты строк только в полях 1,2 из файла csv
  • Выполнить команду Linux только в том случае, если столбец в файле CSV имеет значение больше 1
  • Как поменять столбцы в таком файле?
  • linux при чтении для переключения столбцов, если столбец 3 меньше столбца 2
  • 5 Solutions collect form web for “обратный порядок в csv”

    С perl , если поля в вашем CSV не имеют встроенных запятых, строк новой строки и т. Д .:

     perl -lpe '$_ = join ",", reverse split /,/' input.csv 

    CSV не всегда может обрабатываться простым разбиением строк, а затем запятыми, так как поля иногда могут иметь запятые или новые строки. Чтобы иметь возможность включать эти символы, поля должны быть указаны.

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

     ruby -e 'require "csv"; CSV.filter(&:reverse!)' < input.csv > output.csv 

    Если у вас нет рубина, это работает как с python 2, так и с 3.

     python -c $'import csv; import sys\nfor r in csv.reader(sys.stdin): r.reverse(); csv.writer(sys.stdout).writerow(r)' < input.csv > output.csv 

    Здесь он находится в нескольких строках:

     python < input.csv > output.csv -c ' import csv import sys for r in csv.reader(sys.stdin): r.reverse() csv.writer(sys.stdout).writerow(r) ' 

    Вот несколько примеров, где это будет работать, когда решения с простым разделом запятой не будут работать:

    input.csv

     1,"2,3" 

    output.csv

     "2,3",1 

    input.csv

     1," 2" 

    output.csv

     " 2",1 

    Вы можете использовать awk :

     awk 'BEGIN{ FS=OFS="," # set the field delimiter } NF{ # execute only on non empty line for(i=NF;i>1;i--) # loop through all element except the first one printf "%s", $i OFS; # print the parameter together with the comma printf "%s", $1 "\n" # print last element }' input.csv 
     perl -l -a -F, -n -e 'print join ("," , reverse @F)' input.csv 
     awk -F, '{for(i=NF;i>=1;i--)printf("%s,",$i);printf "\n"}' input.txt | sed "s/$,//" 
    Interesting Posts

    Переменная в команде find задана новой переменной в bash

    Перемещение выделенной клип-карты в основную часть при поступлении нового контента

    Доступная файловая архивная система с веб-сайтом ui?

    Использовать sed для исправления сломанных строк новой строки

    Как управлять службами и демонами Fedora с помощью графического интерфейса?

    Как изменить имя хоста дистрибутива на основе RHEL?

    Сохранение возможности обновления / установки пакетов без фактической модернизации Linux Mint

    Перемещение файлов с помощью find + xargs: target не является каталогом?

    Чтобы проверить, к какому ресурсу обращается, каким процессом

    Выполнение команд оболочки в Python

    Как определить DNS-сервер в openvpn?

    беспроводной интерфейс перестает работать, netcfg сообщает, что сеть не найдена

    Как я могу показать, сколько строк позиций переместилось в diff-выход?

    Docker не смог найти доступный, неперекрывающийся пул адресов IPv4

    LibreOffice 4.0 выглядит уродливым в KDE

    Linux и Unix - лучшая ОС в мире.