Как перебрать файл CSV в bash?

Вполне возможно, что ваш xterm прокручивает слишком много данных, когда вы пытаетесь его остановить. В тот момент, когда вы нажимаете «CTRL+C», процесс останавливается, но вывод, который был буферизован, по-прежнему будет поступать на вашу консоль.

Задержка — это ваш X (, в данном случае xterm ), отображающий информацию.

-1
28.11.2019, 15:57
1 ответ

Прежде всего, избегайте разбора текста -с помощью циклов оболочки . Это трудно сделать, легко ошибиться и очень трудно читать. И медленно. Очень, очень, медленно. Вместо этого используйте что-то вроде awk, которое специально разработано для чтения по «полям». Например, с этим входным файлом:

foo, bar, baz
oof, rab, zab

Вы можете прочитать каждое поле, разделенное запятой -, используя awk -F,, чтобы установить разделитель полей на,:

$ awk -F, '{ print "The 1st field is",$1,"the 2nd", $2,"and the 3rd", $3}' file
The 1st field is foo the 2nd  bar and the 3rd  baz
The 1st field is oof the 2nd  rab and the 3rd  zab

Даже если вы настаиваете на том, чтобы сделать это в оболочке, вам не нужен временный файл, и вам не нужно tr. Вы можете указать while readразделять запятыми:

$ while IFS=, read -r one two three; do 
    echo "The 1st field is $one, the 2nd $two and the 3rd $three"; 
  done < file
The 1st field is foo, the 2nd  bar and the 3rd  baz
The 1st field is oof, the 2nd  rab and the 3rd  zab
5
28.01.2020, 05:07

Теги

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