#!/bin/bash
IFS=','
while read foo bar baz waldo fred qux
do
echo $qux','$foo','$waldo','$fred','$bar','$baz
done
объяснение:
Это сценарий оболочки bash. Это может работать с другими оболочками.
IFS — это переменная среды, которая содержит разделитель полей.
Установите IFS в качестве символа запятой.
Оператор while перебирает все строки ввода.
Функция чтения разделяет строку ввода с помощью IFS (запятой )на несколько переменных.
Строка do является частью структуры оператора while. Каждая строка между «do» и «done» повторяется для каждой строки ввода.
Команда echo создает выходные данные. Для каждой строки ввода мы распечатываем содержимое переменных, заполненных 'read', в желаемом порядке, разделенных запятыми.
Таким образом, эти операторы работают с каждой строкой ввода, разделяя каждую строку на несколько полей, а затем объединяя строку с полями в другом порядке.
Одна потенциальная проблема заключается в том, что если в поле данных есть встроенная запятая, то он недостаточно умен, чтобы понять это.
Если вы сохраните этот сценарий оболочки в файле (, например X.sh ), затем вы должны отправить свой файл CSV в качестве стандартного ввода (stdin )и сохраните переупорядоченный вывод CSV в новый файл.
кошка mycsv.txt | X.sh > newcsv.txt