Получение ошибки при выполнении awk из сценария

Ваше выходное устройство, которое вы подключили через HDMI, нуждаются в паре секунд, чтобы синхронизировать на DataStream, он начинает получать от вашей системы. Сначала вы можете посмотреть добавлять пару секунд тишины или постоянно воспроизводить тишину во время вашего приложения, чтобы сохранить синхронизацию, а затем смешивание в выходе TTS, когда это необходимо.

Редактировать: кажется, связанным с этим вопросом, предложения могут также помочь: Assubuntu.com

0
21.04.2015, 22:44
4 ответа

Намного простые это можно сделать с SED

#!/bin/bash
unset pattern
for fn in *
do
    pattern=${pattern:+${pattern}\\|}$f
done
sed -i "/$pattern/s/$/ Found/" some.txt
0
28.01.2020, 02:51

Код очень запутанный. Например

>>  list=$(ls -l | awk 'NR > 1 { print $9;}')
>>  for fn in $list 

Почему вы делаете ls -l, а затем извлекаете $9 (имя файла - но обратите внимание, что это работает только в том случае, если в имени файла нет пробела); вместо простого

for fn in *

Затем вы делаете несколько grep для номеров строк и awk для извлечения поля

>>  n=`grep -n "$fn" some.txt | awk -F":" '{ print $1;}'`

, но почему бы просто не позволить awk сделать совпадение

n=$( awk -v fn="$fn" '$0 ~ fn { print NR }' some.txt )

И наконец, вместо того, чтобы переключаться вперед и назад между оболочкой и awk, процитировав

>>  awk -F" " 'NR=='"$n"'{OFS=" "; $(NF+1)="Found";}1' some.txt>some.out

, передайте переменную чисто как параметр, как в

awk -v n="$n" 'NR==n { $(NF+1)="Found" } 1'


Теперь сложив эти части вместе:

for fn in *
do
    n=$( awk -v fn="$fn" '$0 ~ fn { print NR }' some.txt )
    awk -v n="$n" 'NR==n { $(NF+1)="Found" } 1' some.txt >some.out
    mv some.out some.txt
done

Не совсем уверен, что это именно то, что вы хотите, но это более понятный код, и он должен иметь, по крайней мере, меньшие проблемы.
Теперь, похоже, с такой реструктуризацией все это можно сделать и в одном экземпляре awk. (Но я оставляю это как упражнение для читателя.)

.
1
28.01.2020, 02:51

Проблемы в вашем скрипте:

  • SC2006 - используйте $ (..) вместо наследия `..` ..`
  • SC2012 - Используйте находку вместо ls, чтобы лучше обрабатывать не буквенно-цифровые имена файлов.
  • SC1035 - Вы отсутствуете необходимое пространство после!

     1! / Bin / bash
      ^ - SC1035 Вы отсутствуете необходимое пространство после!
    2 list = $ (ls -l | awk 'nr> 1 {print $ 9;}')
      ^ - SC2012 Используйте находку вместо ls, чтобы лучше обрабатывать не буквенно-цифровые имена файлов.
    3 для FN в листе $
    4 сделать
    5.
    6 n = `grep -n" $ fn "uver.txt |  awk -f ":" '{print $ 1;}' `
      ^ - SC2006 Используйте $ (..) вместо наследия `..` ..`
    7 awk -f "" nr == '"$ n"' {ofs = "";  $ (NF + 1) = «найдено»;} 1 'uver.txt>
    8 мВ какой-то некоторые.txt
    9 сделано
     

Источник

0
28.01.2020, 02:51
!/bin/bash
list=$(ls -l | awk 'NR > 1 { print $9;}')
for fn in list 
do
echo $fn
    n=`grep -n "$fn" some.txt | awk -F":" '{ print $1;}'` # change this
    awk -F" " 'NR=='"$n"'{OFS=" "; $(NF+1)="Found";}1' some.txt>some.out
    mv some.out some.txt
done



!/bin/bash
list=$(ls -l | awk 'NR > 1 { print $9;}')
for fn in list; do # also decided to clean this up
    echo $fn
    n=$(grep -n "$fn" some.txt | awk -F":" '{ print $1;}') # to this
    awk -F" " 'NR=='"$n"'{OFS=" "; $(NF+1)="Found";}1' some.txt>some.out # also, what is this line supposed to do? There is usually a better way to do something that have to run a mv command to overwrite
    mv some.out some.txt
done

Там может быть что-то еще, но у меня еще не было моего кофе.

http://tldp.org/ldp/bash-beginners-guide/html/sect_03_04.html

0
28.01.2020, 02:51

Теги

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