Каково различие между “и> нечто” и “> нечто 2> &1”?

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

Я также исправил использование 4 столбцов (у вас, кажется, есть 4 заголовка, но вы пытаетесь использовать только 3?), Переместил строку index ++ на перед тем, как использовать , перед проверкой на неопределенные значения объединение строк и удаление пустого заголовка.

var csv = "FirstName,LastName,dob,phone,"+
"John,Smith,10/01/1998,21234123,"+
"Millie,Henderson,23/03/2000,21768345,"+
"Briana,Wright,23/03/1976,22321467";

function csvJSON(csv){
  var values=csv.split(',');
  var index =-1;
  var lines = [];
  for(var i=0;i<values.length; i++){
    if (i % 4==0){
      index++;
    }
if (typeof lines[index] === 'undefined') lines[index] = "";
    lines[index] = lines[index]+ values[i]+ ",";
  }

  var result = [];
  var headers=lines[0].split(',').splice(0, lines.length);
  lines.splice(0, 1);
  lines.forEach(function(line) {
    var obj = {};
    var currentline = line.split(',');
    headers.forEach(function(header, i) {
      obj[header] = currentline[i];
    });
    result.push(obj);
  });

  return result; //JavaScript object
  //return JSON.stringify(result); //JSON
}

console.log(csvJSON(csv))

10
задан Max Cantor 9 October 2008 в 17:27
поделиться

7 ответов

Из руководства удара:

Существует два формата для перенаправления стандартного вывода и стандартной погрешности:

&>word

и

>&word

Из двух форм предпочтено первое. Это семантически эквивалентно

 >word 2>&1

Фраза, "семантически эквивалентная", должна уладить проблему с Вашим коллегой.

8
ответ дан 3 December 2019 в 18:37
поделиться

Ситуация, где эти две строки имеют другое поведение, состоит в том, когда Ваш сценарий не работает в ударе, но некоторой более простой оболочке в sh семействе, например, тире (которому я верю, используется в качестве/bin/sh в некоторых дистрибутивах Linux, потому что это более легко, чем удар). В этом случае,

fooscript &> foo

интерпретируется как две команды: первый выполняет fooscript в фоновом режиме, и второй усекает нечто файла. Команда

fooscript > foo 2>&1

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

6
ответ дан 3 December 2019 в 18:37
поделиться

Главная причина использовать 2>&1, по моему опыту, когда Вы хотите добавить весь вывод в файл, а не перезаписать файл. С &> синтаксис, Вы не можете добавить. Таким образом с 2>&1, можно записать что-то как program >> alloutput.log 2>&1 и получите stdout и вывод stderr, добавленный к файлу журнала.

3
ответ дан 3 December 2019 в 18:37
поделиться

&>foo меньше вводит, чем >foo 2>&1, и менее подверженный ошибкам (Вы не можете получить его в неправильном порядке), но достигает того же результата.

2>&1 сбивает с толку, потому что необходимо поместить его после 1> перенаправление, если stdout не перенаправляется к a | канал, в этом случае это идет прежде...

$ some-command 2>&1 >foo    # does the unexpected
$ some-command >foo 2>&1    # does the same as
$ some-command &>foo        # this and
$ some-command >&foo        # compatible with other shells, but trouble if the filename is numeric
$ some-command 2>&1 | less  # but the redirect goes *before* the pipe here...
2
ответ дан 3 December 2019 в 18:37
поделиться
&> foo # Will take all and redirect all output to foo.

2>&1 # will redirect stderr to stdout.
1
ответ дан 3 December 2019 в 18:37
поделиться

2> &1 зависит от порядка, в котором он указан на командной строке. Куда и> отправляет и stdout и stderr к тому, везде, куда, 2> &1 отправляет stderr туда, где stdout в настоящее время идет в той точке в командной строке. Таким образом:

команда> файл 2> &1

отличается, чем:

команда 2> &1> файл

где первый перенаправляет и stdout и stderr в файл, последние перенаправления stderr туда, где stdout идет, прежде чем он будет перенаправлен в файл (в этом случае, вероятно, терминал.) Это полезно, если Вы хотели сделать что-то как:

команда 2> &1> файл | меньше

Где Вы хотите использовать меньше, чтобы пролистать вывод stderr и сохранить вывод stdout в файл.

1
ответ дан 3 December 2019 в 18:37
поделиться

2>&1 могло бы быть полезно для случаев, где Вы не перенаправляете stdout к где-то в другом месте, а скорее Вы просто хотите, чтобы stderr был отправлен в то же место (такое как консоль) как stdout (возможно, если команда, которую Вы выполняете, уже отправляет stderr где-то в другом месте кроме консоли).

0
ответ дан 3 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

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