Вам не нужен цикл. Большинство инструментов обработки текста принимают несколько аргументов, например с sed
:
sed '/From file/{s/.*<\(.*\)>/\1/;h
}
/Ratio of morphemes over utterances/!d
s/.*= //;H;x;s/\n/\t/' ./* > outfile
Это извлекает имя файла и сохраняет его в буфере хранения, удаляет все строки, кроме тех, где извлекается "коэффициент", который он добавляет к имени файла, а затем обменивается буферами и заменяет новую строку табуляцией. Конечно, \ t
специфичен для gnu sed
, поэтому замените его буквенной вкладкой (в терминале нажмите Ctrl + V , затем ] Вкладка ), если вы не используете установку GNU
. Еще быстрее, с любым sed
:
sed '/From file/{s/.*<\(.*\)>/\1/;h
}
/Ratio of morphemes over utterances/!d
s/.*= //;H;x' ./* | paste - - > outfile
Если ваши файлы огромны, вы можете выйти при втором совпадении (строка с «соотношением») и перейти к следующему файлу. Здесь пригодится nextfile
gawk
(я думаю, что это POSIX, но не уверен, какие варианты awk
его поддерживают ...):
awk '/From file/{printf("%s\t", substr($3, 2, length($3)-2))}
/Ratio of morphemes over utterances/{print $7; nextfile}' ./* > outfile