Как я могу манипулировать содержимым текстового файла в новый выходной файл

^[в вашем примере представляет собой одиночный символ :escape-код ASCII (27 ). Различные последовательности зависят от используемого вами терминала, а также от того, использует ли он обычный режим -или режим приложения -.

Экран GNU не определяет эти последовательности; он позволяет (большинству )обычных функциональных клавиш -проходить. Какой бы терминал вы ни использовали, из Windows будет местом для поиска документации.

В обычном режиме клавиши курсора -для VT100 -как терминалы (, включая xterm )посыл Escape , за которым следует [, за которым может следовать один или несколько числовых параметров и заканчивается одним из A , B , C или D . Первые два символа меняются в режиме приложения на Escape , за которым следует буква O .Каждая из этих функций имеет имена, например, как указано в XTerm Control Sequences(CSI, SS3, final byte ).

Обычно первым (необязательным )параметром будет счетчик повторов . Ранняя версия ключей-модификаторов xterm вместо этого отправляла бы параметр, соответствующий типу модификатора (5, являющегося control). В течение достаточно долгого времени информация об этом модификаторе находилась во втором параметре, например,

^[[1;5A

для управление вверх -стрелка . Подобные модификаторы (и фактически используемые для функциональных клавиш — в любом случае не VT100 )не являются функциями VT100, а адаптированы в xterm из описания VT510 или аналогичной модели.

Дополнительная литература:

-2
04.10.2019, 21:34
2 ответа
sed '/SUBJECT_/!d;s/ /,/g;s/\(.*\),\(SUBJECT_[0-9]*\).*/\2,\1/'
  • /SUBJECT_/!dудаляет все строки без ключевого слова (не нужно создавать заголовок скриптом)
  • s/ /,/gзапятые вместо пробелов
  • s/\(.*\),\(SUBJECT_[0-9]*\).*/\2,\1/изменить порядок
1
28.01.2020, 05:16

Следующий скрипт представляет собой довольно хитрое использование модуля perl Text::CSV. Обычно он используется для синтаксического анализа и вывода правильно отформатированных CSV-файлов, но здесь я просто использую его для метода say(), потому что я не хочу писать свой собственный код для правильного цитирования полей там, где это необходимо (, т. е. когда они содержать пробел, перевод строки -, двойную -кавычку или запятую ).

#!/usr/bin/perl -an
use Text::CSV qw(csv);

BEGIN {
  $csv=Text::CSV->new();
  # define our column headers in the right order.
  @columns = ("Id", "surface area (mm^2)", "gray matter volume (mm^3)",
    "avg cortical thickness +- sd (mm)", "mean curvature",
    "gaussian curvature", "folding index", "curvature index", "hemi", "ROI");
  # output them as a CSV field header.
  $csv->say(*STDOUT, \@columns );
};

# skip lines that don't begin with a digit
next unless /^\d/;

# Split the subject (field 10) into multiple sub-fields
# perl arrays start from 0, so the 10th field is $F[9].
# This will split it into an array like:
# SUBJECT 89765432 label lh APD57 20d label
#     0      1       2   3    4    5   6
my @subject=split(/[\/_.]/,$F[9]);

# Insert the first two of those sub-fields at the beginning of the input array
# as one new field joined by an underscore.
unshift @F, $subject[0]. "_". $subject[1];

# Inserting that field means that field 10 is now field 11 - i.e. $F[9] is now $F[10].
# Replace it with the hemi value, and add a new ROI field at the end.
$F[10]=$subject[3];
push @F, $subject[5];

# print it as properly-formatted CSV.
$csv->say(*STDOUT, \@F);

Выход:

Id,"surface area (mm^2)","gray matter volume (mm^3)","avg cortical thickness +- sd (mm)","mean curvature","gaussian curvature","folding index","curvature index",hemi,ROI
SUBJECT_89765432,72,6.18,1307,87.23,987,0.566,2,3,1.8,lh,20d
0
28.01.2020, 05:16

Теги

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