В перле:
#!/usr/bin/perl
use feature 'say';
while(<>) {
chomp; # strip the trailing end-of-line character(s).
my (@F) = split; # split the input line into fields
$F[0] =~ s/(^[^_]*_[^_]*)_.*/$1/; # strip everything from 2nd _ from field 1
$F[4] =~ s/^ID=[^;]*;Target=//; # strip from ID= to Target= from field 5
say join("\t",@F); # print all the fields separated by a tab.
}
Если вы хотите это как один -вкладыш:
perl -lane '$F[0] =~ s/(^[^_]*_[^_]*)_.*/$1/;
$F[4] =~ s/^ID=[^;]*;Target=//;
print join("\t",@F);' input.txt
Опция perl -l
включает автоматическую линию -завершающую обработку (chomp ). -a
включает awk -как автоматическое разбиение поля (на массив@F
). -a
также неявно включает -n
(, который автоматически создает цикл while(<>){.. }
вокруг кода Perl ), но мне нравится указывать эту опцию явно. Подробности см. в man perlrun
.
Обратите внимание, что массивы perl начинаются с 0, а не с 1.
Пример вывода (либо с одной подставки -, либо с одной -версии вкладыша):
SF_0000000555 10873 11041 + SF_0000000005 99 267 168
SF_0000000555 188079 188215 + SF_0000000020 3 138 135
SF_0000000555 137594 137704 - SF_0000000048 16 126 110
SF_0000000555 70582 71504 - SF_0000000350 8970 9886 916
SF_0000000555 100212 101204 - SF_0000000350 9584 10597 1013
SF_0000000555 101165 101747 - SF_0000000350 9005 9581 576
SF_0000000555 82434 82891 - SF_0000000350 9273 9730 457
Создание каталогов для каждого сервера
find /var/mnt/logshare/ -maxdepth 1 -type f | cut -d' ' -f1 | sort -u |
while read server ; do
mkdir "$server"
done
что мы делаем:
-type f
)в каталоге logshare, а не в его подкаталогах(-maxdepth 1
)cut
выводим -u
только уникальные записи Соответствующее перемещение файлов
find /var/mnt/logshare -maxdepth 1 -type d |
while read server ; do
mv "$server?*" "$server"
done
Попробуйте,
cd /path/to/files/ || exit
for f in *' '*; do
mkdir -p -- "${f%% *}" &&
mv -- "$f" "${f%% *}/"
done