Извлечение текстовых строк из нескольких файлов и печать в один файл

Pulseaudio и ALSA используют другой способ управления громкостью. ALSA предоставляет все регуляторы громкости аппаратного микшера, в то время как Pulseaudio имеет один регулятор громкости для каждого устройства ввода (и устройства вывода ), который по очереди использует все регуляторы громкости микшера ALSA.

Рекомендуемый способ работы с Pulseaudio — поддерживать громкость устройства ввода на уровне 100 % (, если только ваше оборудование по какой-то причине не слишком чувствительно и вы получаете плохое качество ), и вместо этого контролировать громкость ввода для каждого потока.

0
31.12.2019, 05:27
3 ответа

zsh версия (оболочка по умолчанию в терминале Mac):

for file in $(find. -type f -iname "*.txt"); cat "$file" | head -2 | tail -1 >> output.txt

Это предполагает, что все входные текстовые файлы находятся в одном каталоге, и порядок обработки файлов не важен.

bashверсия:

for file in $(find. -type f -iname "*.txt"); do cat $file | head -2 | tail -1; done >> output.txt 

РЕДАКТИРОВАТЬ -1:Следуя предложениям Nasir и steeldriver echo, подстановка команд не требуется. Далее следует awk-версия

.
for file in $(find. -type f -iname "*.txt"); awk 'NR==2' $file >> output.txt

И, если файлы не имеют расширения txt, вместо него можно использовать любой шаблон, общий для всех файлов. Предполагая, что все файлы имеют Fileв своем имени, версия awkможет быть

for file in $(find. -type f -iname "*File*"); awk 'NR==2' $file >> output.txt

РЕДАКТИРОВАТЬ -2:

Из того, что вы упомянули, ваши FstRsltsи GenDivRsltsявляются уникальными идентификаторами файловых групп. Следовательно, вы можете использовать "*FstRslts"для ваших файлов FstRsltsвместо "*.txt". То же дляGenDivRslts

ПРИМЕЧАНИЕ

Я принимаю предложение и урок @steeldrivers и добавляю следующее в качестве одного из ответов (более идиоматично):

find. -type f -iname "*FstRslts" -exec awk 'NR==2' {} \; > output.txt

РЕДАКТИРОВАТЬ -3 find.-начать поиск из текущего рабочего каталога

type -f-поиск типа файла

-iname "*FstRslts"-игнорировать регистр при поиске имен файлов, соответствующих шаблону

-exec-выполните следующую команду

awk 'NR==2'-извлечь 2-ю строку каждого файла, найденного в результате выполнения предыдущих команд (соответствующий шаблон)

{} \;-заполнитель для файлов (совпадающий шаблон )завершение команды

> output.txt-перенаправить результаты в файл с именем «output.txt»

1
28.01.2020, 02:29

Сначала мы определяем некоторые полезные переменные оболочки в нашей командной строке:

$ d='[0-9]'
$ pre='TrkNbr_1083n1282_L1n2_PrelimPops'
$ main="$d${d}SubSampPops_Rep$d$d$d"
$ post='GenDivRslts'
$ filename="${pre}_${main}_${post}"

С GNUawk:

$ find. -type f -name "$filename"      |
  sort -t_ -nk5.1,5.2 -nk6.4,6.6        |
  xargs -r awk 'FNR==2{print;nextfile}' \
> new_text_file;

С GNUsed:

$ find. -type f -name "$filename" |
  sort -t_ -nk5.1,5.2 -nk6.4,6.6   |
  xargs -r sed -se '2!d'           \
> new_text_file;

Сperl:

$ find. -type f -name "$filename"                |
  sort -t_ -nk5.1,5.2 -nk6.4,6.6                  |
  xargs -r perl -ne 'print,close ARGV if $. == 2' \
> new_text_file;

Сhead/tail:

$ find. -type f -name "$filename" |
  sort -t_ -nk5.1,5.2 -nk6.4,6.6   |
  xargs -r \
   sh -c '
    for f
    do
     head -n 2 "$f" | tail -n 1
    done
   ' x > new_text_file;
1
28.01.2020, 02:29

Почему бы просто не

awk 'FNR == 2' *FstRslts > NewFile

? Если командная строка становится слишком длинной, попробуйте сгруппировать входные файлы по их подразделениям или используйте xargs, чтобы разделить строку.

1
28.01.2020, 02:29

Теги

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