Поведение при чтении / записи каталогов Linux?

Решение на perl:

$ perl -F"\t" -anle 'if($.==1){print; next} push @{$k{$F[0]}},@F[1..$#F]; 
  END{print "$_\t" . join(";",@{$k{$_}}) for sort keys(%k)}' file 
A   B   
123 fvv;kjf;ccd
567 abc;abc
879 ttt

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


Что касается того, где вы ошиблись, мы не сможем сказать вам, пока вы не объясните, что на самом деле произошло, но, черт побери, ваша попытка perl потерпит неудачу, потому что:

  • Вы используете -F, , при котором в качестве разделителя полей используется запятая, если в поле ввода есть вкладки.
  • Вы используете -l и напечатайте "foo \ n" . -l уже добавляет новую строку к каждому вызову печати, поэтому у вас будет несколько пустых строк.
  • Вы используете $ h {$ F [0]}. ",". $ F [1]; для добавления, поэтому при первом запуске и $ h {$ F [0]} не определено, вы добавите дополнительные , в начало вашего сохраненного значения.
  • Вы смотрите только на второе поле, игнорируя все остальные.

Точно так же ваш awk завершится ошибкой, потому что:

  • Вы печатаете foo "" bar , который объединит вывод без пробелов между полями. Вам нужно print foo, bar , а также OFS = "\ t" для вывода с разделением табуляцией.
  • Вы смотрите только на второе поле, игнорируя все остальные.
0
02.04.2019, 15:03
1 ответ

Для вашего варианта использования (разработка )я бы сказал, что /home— это очень активный каталог r/w.

/srvобычно не используется, если вы не хотите использовать его для разработки. Обычно туда помещаются серверные данные (веб-сайтов, файловые хранилища, возможно, базы данных sql и т. д. ).

/optобычно содержит дополнительные (фактически необязательные )приложения, которые нельзя установить с помощью менеджера пакетов вашего дистрибутива.

/dev, /tmp, /run, чаще всего чаще всего настраиваются как виртуальные, только ОЗУ -, файловые -системы (tmpfs )в большинстве основных дистрибутивов Linux.

/procи /sysдействительно всегда виртуальны в -файловых -системах ядра.

/mnt— это в основном каталог для временного ручного монтирования, и он почти никогда не используется в настольных системах, так как его чаще заменяют /media, который, по сути, обычно не нужно беспокоиться о том, чтобы занять какое-либо место или Пропускная способность ввода-вывода любого из ваших твердотельных накопителей, потому что каталоги там на самом деле просто точки монтирования -для съемных носителей.

/lost+found— это даже не файловая -система как таковая -, это скорее каталог обслуживания, характерный для каждой смонтированной файловой -системы ext[234].

Наконец, рассмотрите возможность использования параметра монтирования noatimeпо крайней мере для всех файловых -систем, содержащих файлы ОС, или, в любом случае, в основном для -читаемых файлов, таких как /bin, /usr, /boot, /lib. ]. Вы теряете обновление времени доступа к файлам в нем, но вы увеличиваете скорость и в SSD без-деградации с течением времени.

ХТХ

1
28.01.2020, 02:40

Теги

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