Совершенно другой подход будет использовать GNU Parallel и использовать его - заголовок
и - Параметры
:
cat input.csv | parallel --header : --pipe -N 10 'cat > output{#}.csv'
Это получится Вы 11 строк в каждом из файлов (строка заголовка плюс десять из -N 10
, за исключением последнего файла, написанного таким образом).
Как насчет следующего awk
Сценарий:
#!/usr/bin/awk -f
BEGIN {
FS="\t"
print "#key\tstring\tpos(string)\tApos(string)"
}
{
out=""
printf "%s\t",$0
split($2,str,"")
gsub(/ /,"",$3)
split($3,pos,",")
for (i in pos){
if (str[pos[i]]=="A"){
out = out pos[i] ", "
}
}
gsub(/, $/,"",out)
print out
}
Сохранить его как (например)
finda.awk
и сделать его исполняемым с помощью chmod + x finda.awk
.
Затем запустите его против ваших входных данных и перенаправляйте вывод в новый файл:
./findA.awk input.txt > output.txt
cat output.txt
#key string pos(string) Apos(string)
key1 AA000AA000000AAA0A 2, 3, 18, 12 2, 18
key2 00A00AAA000AAAA00A 3, 18 3, 18
Вывод не так уделяется, как ваш пример, как он является разграниченным вкладом (согласно вашему запросу), а ширина вкладки не Выровняйте с шириной различных струн.
Я не уверен, как вы сейчас это делаете (было бы полезно увидеть ваш код на Python), но вы можете создать список элементов столбца 3, которые указывают на 'A' в столбце 2 так:
.[i for i в COLUMN3 if COLUMN2[i]=='A']
Это кажется простой проблемой, но, возможно, я не до конца понимаю ее. Возможно, вы забываете, что строки - это итерабельные?
.Ужасная perl
:
$ perl -anle '
printf "%s Apos(string)\n",$_ and next if /^#/;
printf "%s",$_;
$len = 12 - length((split(/\s+/,$_,3))[-1]);
for $pos_ss (@F[2..$#F]) {
$char = substr($F[1],int($pos_ss)-1,1);
push @res, int($pos_ss) if $char eq 'A';
}
printf "%@{[12-4+$len]}s\n", join ", ",@res;
@res=();
' file
#key string pos(string) Apos(string)
key1 AA000AA000000AAA0A 2, 3, 18, 12 2, 18
key2 00A00AAA000AAAA00A 3, 18 3, 18
Она работает аналогично моему решению для этого ответа, плюс добавление переменной $len
для расчета формата, необходимого для печати последнего выровненного столбца.