У меня есть это .scp файлы, который содержит полную команду, необходимую к для преобразования набора файлов.
Это регистрирует, был сгенерирован другим сценарием, для другой цели, но теперь мне нужен он, преобразовывают набор файлов.
Проблема состоит в том, хотя тот каждый файл запускается с имени файла преобразовываемых файлов, который не работал бы, когда я хочу выполнить его..
Как я удаляю первый из файла, такого, что я могу преобразовать все файлы, столь же легкие как выполнение сценария?
Вот образец того, как текст в файле отформатирован.
fcaw-b-an406 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an406-fcaw-b.sph |
fcaw-b-an407 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an407-fcaw-b.sph |
fcaw-b-an408 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an408-fcaw-b.sph |
fcaw-b-an409 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an409-fcaw-b.sph |
fcaw-b-an410 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an410-fcaw-b.sph |
fcaw-b-cen1 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/cen1-fcaw-b.sph |...
Желаемый вывод
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an406-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an407-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an408-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an409-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an410-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/cen1-fcaw-b.sph |...
Много путей:
grep
с PCRE (-P
):
grep -Po '^[^\s]+\s+\K.*' file.txt
^[^\s]+\s+
соответствует первому полю наряду с запаздывающим пробелом, \K
отбрасывает соответствие, и затем .*
остальная часть соответствий строки и печатаетсяsed
:
sed -E 's/^[^[:blank:]]+[[:blank:]]+//' file.txt
^[^[:blank:]]+[[:blank:]]+
соответствует первому полю, снова с запаздывающим пробелом (пробелами) и заменяется пустой строкой awk
:
awk -F "[[:blank:]]+" '{$1=""; print substr($0, 2)}' file.txt
-F "[[:blank:]]+"
разделитель полей наборов как один или несколько пробелов, $1=""
наборы первое поле как пустая строка, это представляет пробел впереди, таким образом, мы должны сделать строку, режущую с substr (0$, 2)' для получения символов, начинающих со второгоcut
:
cut -d" " -f2- file.txt
-d" "
устанавливает разделитель как пространство, и -f2-
печатает поля, начинающие со второгоbash
:
while read -r _ desired; do echo "$desired"; done <file.txt
_
, desired
содержит остающуюся часть и печатается echo "$desired"
perl
:
perl -pe 's/^[^\s]+\s+//' file.txt
sed
одинpython
:
#!/usr/bin/env python
with open('file.txt') as f:
for line in f:
print line.split(' ', 1)[1]
line.split(' ', 1)
будет split
на пространстве с максимумом 1
разделение операции, таким образом, индекс 0 будет содержать первое слово и индекс 1, будет иметь желаемую часть (т.е. от второго слова до конца)