a )Работаapt install filemanager-actions-nautilus-extension
b )РаботаFileManager-Actions Configuration Tool
c )Файл => Новое действие
d01)Action
вкладка :МеткаDisplay item in location context menu
d02)Command
вкладка:
/usr/bin/tilix
--working-directory=%d/%b
%d
e )Перезапустите Наутилус
С POSIX awk
мы можем сделать, как показано. Разделите третье поле через запятую для строк> 1 и выберите те элементы, которые начинаются с S :, а затем соедините их запятой и сделайте это поле последним + 1.
awk -F '\t' '
BEGIN {
OFS = FS
_SEP_ = ","
}
NR==1{$(NF+1) = "S_mutation"}
NR>1&&length($3)>0{
nf = split($3, a, _SEP_)
t = ""
for (i=1; i<=nf; i++) {
if (a[i] ~ /^S:/) {
t = t (t=="" ? t : _SEP_) a[i]
}
}
$(NF+1) = t
}1
' file
То же самое в Perl
, но с использованием регулярных выражений
perl -lnse '$,="\t";
print $_,($.==1?q(S_mutation):
"@{[/(?:\t|,)\KS:[^,]*/g]}"||());
' -- -\"=,./file
Выход:
id clade mutation S-mutation
243 40A S:ojo,L:juju,S:lili S:ojo,S:lili
254
267 40B J:jijy,S:asel,M:ase S:asel
Использованиеawk
(POSIX ).
awk -F "\t" '
BEGIN { OFS = FS }
NR == 1 { $4 = "S_Mutation" }
NR > 1 && NF == 3 {
printf "%s", $0 "\t"
$0 = $3
gsub(/[^S]:[^,]*,?/, "")
sub(/,$/, "")
print $1
next
}
1' data.txt
S:
Возможно, вы захотите не печатать конечную вкладку, проверить, является ли $1
чем-то после подстановки, а затем напечатать TAB
+ поле. (В случае, если вы не хотите, чтобы табуляция заканчивалась в строках, где нет S:xxx
полей. Что-то вроде:
# Print line
printf "%s", $0
# Set line = field 3
$0 = $3
# Replace all N:xxx where N is not S
gsub(/[^S]:[^,]*,?/, "")
# Remove trailing comma
sub(/,$/, "")
# Print the field
if ($1 != "")
print "\t"$1
else
print ""
# Continue with next line
next
Если вы не против использоватьsed
:
sed 'h;s/.*[[:space:]]/,/;s/,[^S]:[^,]*//g;x;G;s/\n,/\t/'
Обратите внимание, что \t
будет работать только с GNU sed
. Для других вариантов вставьте литеральную вкладку, обычно вводя ctrlv , а затем клавишу табуляции.
Идея состоит в том, чтобы сохранить строку в резервном пространстве, затем изолировать последний столбец и удалить все мутации, кроме S:
. Затем добавьте это как последний столбец к сохраненной строке:
h
копирует строку в область хранения s/.*[[:space:]]/,/
заменяет все до последней табуляции или пробела запятой, так что остается последний столбец с предваряемой запятой. Эта запятая поможет на следующем шаге s/,[^S]:[^,]*//g
удаляет все элементы, кроме S:
x
меняет местами пространство хранения и пространство шаблона, поэтому G
добавит новый столбец к исходному столбцу, хранящемуся в пространстве хранения s/\n,/\t/
наконец, заменяет новую строку из добавления и запятую, которую мы ввели табуляцией С Perl
perl -F'\t' -lpe '
push @F, $. == 1 ? "S_mutation" : join ",", grep { /^S:/ } split /,/, $F[2];
$_ = join "\t", @F
' A.tsv > B.tsv
Пр.
$ perl -F'\t' -lpe '
push @F, $. == 1 ? "S_mutation" : join ",", grep { /^S:/ } split /,/, $F[2];
$_ = join "\t", @F
' A.tsv | column -t
id clade mutation S_mutation
243 40A S:ojo,L:juju,S:lili S:ojo,S:lili
254
267 40B J:jijy,S:asel,M:ase S:asel
awk 'BEGIN{ FS=OFS="\t" }
{ c3=$3; gsub(/(^|,)[^S]*(,|$)/, ",", c3); gsub(/^,+|,+$/, "", c3)
print $0, (NR==1?"S_Mutation":c3)
}' infile
FS — разделитель полей ввода, а OFS — разделитель полей вывода; оба мы устанавливаем на символ Tab \t
; затем мы взяли резервную копию из 3-го rd поля c3=$3
для замены и сохранения оригинала нетронутым.
затем первая функция gsub ()заменяет те подполя -(, которые они разделены символом запятой )с запятой, если она не начинается с S
char; второй gsub ()удаляет начальную(^,+
)/ конечную(,+$
)запятую (s ), чтобы они могли появиться после некоторого удаления.
, затем мы печатаем всю строку, за которой следует конечное значение переменной c3
или S_Mutation
строка, если это была первая строка, в которой тернарный оператор(condition?if-true:if-false
)управляет тем, что печатать при выполнении условия.