Как использовать вывод команды (ls) во вводе другой команды (sox)?

Вы можете попробовать что-то вроде этого:

$ awk '/After/{a=1;next}/Before/{a=0}; (a==1){print NR" : "$0}' file 
5 : Address1
6 : Address2
7 : Address3
13 : Address1
14 : Address2
15 : Address3
21 : Address1
22 : Address2
23 : Address3
29 : Address1
30 : Address2
31 : Address3
37 : Address1
38 : Address2
39 : Address3

Идея очень проста. Переменная a изменяет значение, если текущая строка соответствует After или Before , и мы печатаем строку, только если a равно 1.

Чтобы сохранить их в отдельные выходные файлы, вы можете сделать:

awk '/After/{a=1; k++;next}/Before/{a=0}; (a==1){print NR" : "$0 > k".out"}' file 

Здесь я использую переменную k , чтобы подсчитать, сколько раз будет найдено слово после . Выходным файлом будет текущее значение k и .out . Если я выполню приведенное выше в вашем примере, я получу:

$ ls
1.out  2.out  3.out  4.out  5.out
1
21.05.2018, 22:45
3 ответа

Como mencioné en un comentario, si no necesita la clasificación de versiones (sort -V), simplemente puede hacer sox *wav. En Linux, *wavexperimentará una expansión de nombre de archivo, lo que dará como resultado una lista de nombres de archivo ordenados alfabéticamente. Esto se ve afectado por la configuración regional, particularmente LC_COLLATE, que puede buscar en Google para obtener más información.

Si necesita sort -V, la forma correcta de manejar esto es con cadenas y matrices terminadas en nulo para manejar nombres de archivo con espacios y otros caracteres especiales.Este script colocará la salida del comando sorten una matriz y ejecutará soxcon esta lista.

#!/bin/bash

unset wav_files

while IFS= read -r -d '' file; do
   wav_files+=("$file")
done < <(find. -maxdepth 1 -type f -name "*wav" -print0 | sort -V -z)

if (( ${#wav_files[@]} == 0 )); then
   echo "No wav files found"
else
   sox -- "${wav_files[@]}"
fi

Esto puede ser más de lo que esperaba, pero es una buena práctica;)

2
28.01.2020, 00:34

¿Por qué no intentarlo?:

sox `ls *.wax | sort -V`
-2
28.01.2020, 00:34

Si y solo si sus nombres de archivo son "buenos" y no contienen espacios en blanco o caracteres especiales (esp. caracteres glob ), la salida fácil es ejecutar sorten una sustitución de comando:

sox $(printf "%s\n" *.wav | sort -V) output.wav

El printfaquí funciona para poner nuevas líneas(\n)después de cada nombre de archivo.

(Como de costumbre, una expansión sin comillas como esa se interrumpirá si los nombres de los archivos tienen espacios o tabulaciones (, se dividirán en dos después de expandir $(...)); o líneas nuevas (se dividirán en dos antes desort); o caracteres globales (*?[], se expandirán a cualquier nombre de archivo coincidente ). Así que no hagas eso si no sabes que los nombres de los archivos son lo suficientemente buenos. Véase, por ejemplo.https://mywiki.wooledge.org/WordSplittingy ¿Cuándo es necesaria la cita doble -?

0
28.01.2020, 00:34

Теги

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