Как отделить каждую строку текста запятой и поместить их в массив?

Похоже, вы уже нашли ответ с первым dd . Это просто в другом порядке. Прочтите байты (двухсимвольные шестнадцатеричные последовательности) в обратном порядке. И установите значение пропуска 440 вместо 439.

0
15.01.2019, 16:55
3 ответа

Это можно сделать с помощью инструмента sedследующим образом:

sed - e '
       s/^[[:blank:]]*//;s/[[:blank:]]*$//
       s/"/\\"/g;H;$!d;g
        s/\n/","/g;s/.*/"&"/
 ' input

Когда каждая строка прочитана, обрежьте из нее начальный и конечный пробелы. Экранируйте все двойные кавычки. Добавьте в пространство хранения и, когда будет видна последняя строка, измените все новые строки на разделитель элементов массива.

0
28.01.2020, 02:41
IFS=$'\n'
array=( $(awk '{print "\"" $0 "\""}' input_file) )

Для каждой строки в input_file, сверху вниз, команда awkв подстановке команд выполняет следующие действия:

  1. Заключите строку в двойные кавычки.
  2. Завершите строку в двойных -кавычках символом новой строки.
  3. Вывести результирующую строку на стандартный вывод.

Однако вместо вывода на стандартный вывод результат выполнения команды awkиспользуется для замены всей подстановки команды. Замена является результатом подстановки команды.

Затем к результату подстановки команд применяется разбиение слова -. Разделение слова -идентифицирует любую последовательность символов, не включающую символ IFS, но заканчивающуюся символом IFS, как отдельное «слово». Следовательно, в данном конкретном случае «словом» является любая строка (из строки input_file), заключенная в пару двойных кавычек командой awk.

Поскольку подстановка команды заключена в крайнюю пару круглых скобок (), результат awkпомещается между этими скобками, и оболочка обрабатывает круглые скобки целиком, включая все подстановочные токены между (, которые ваши строки размещены стороной -на стороне -, каждая из которых заключена в пару двойных кавычек )в виде массива.

ПРИМЕЧАНИЕ:

  • После присвоения массива вы можете сбросить переменную оболочки IFSобратно к исходному значению пробела, табуляции и новой строки.
0
28.01.2020, 02:41
sed - e '
   s/^[[:blank:]]*//;   # trim any leading blanks from the current line read in
   s/[[:blank:]]*$//;   # trim any trailing blanks from the current line read in
   s/"/\\"/g;           # escape any double quotes which might exist in the current line read in
   H;1h;                # append the current line to the hold space, in case of first store as is
   $!d;                 # not yet EOF, drop everything and go back to reading the next line
   g;                   # @ EOF, fetch the hold space: line1\nline2\nline3\n....\nlineEND
   s/\n/","/g;          #  line1","line2","line3","....","lineEND
   s/.*/"&"/;           # "line1","line2","line3","....","lineEND"
' input
0
28.01.2020, 02:41

Теги

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