Biến Echo thành tệp không có dòng mới


0

Tôi muốn thoát khỏi các dòng mới trong Echo sau đó thêm một tệp với chúng.

files=$(cat ./Temp/files.txt)
prefixedfiles=$(cat ./Temp/prefixedfiles.txt)
echo "$files" >> generatedscript
sed -e 's/^/ffmpeg -i /' generatedscript >> generatedscript2
sed 's/$/ -vcodec libx264 -acodec copy -threads 10 -crf 18 /' >> 
generatedscript2
echo "$prefixedfiles" > generatedscript3

Ví dụ: tập tin.txt

./Testing/blank.mp4
./More Testing/Test.mkv

Ví dụ: tiền tốfiles.txt

../Encoded/Testing/blank.mp4
../Encoded/More Testing/Test.mkv

Sản lượng dự kiến: createdscript3

ffmpeg -i ./Testing/blank.mp4 -vcodec libx264 -acodec copy -threads 10 -crf 18 ../Encoded/More Testing/blank.mp4
ffmpeg -i ./More Testing/Test.mkv -vcodec libx264 -acodec copy -threads 10 -crf 18 ../Encoded/More Testing/Test.mkv

Dường như có lỗi logic trong tập lệnh của bạn (loại bỏ các dòng mới có thể được thực hiện với echo -n nhưng tôi không nghĩ rằng điều này sẽ giúp bạn). Tại sao bạn có cả files.txt và prefixedfiles.txt, thay vào đó là một tệp duy nhất có phân tách nếu được yêu cầu? Đường dẫn trên prefixedfiles.txt có thay đổi trên cơ sở từng tệp không? Bạn nghĩ dòng thứ hai đang cố gắng làm gì? (Tôi hỏi những câu hỏi này bởi vì tôi nghi ngờ theo cách bạn đang cố gắng để xây dựng kịch bản là không thực tế - có thể bạn cần để lặp qua $ file theo phương pháp đường-by-line Không có điểm trong việc giúp ghi nó cho đến khi tôi hiểu được những khó khăn..
davidgo

1. Lý do 2 tách biệt là vì để có thể thêm "-vcodec libx264 -acodec copy -threads 10 -crf 18" ở giữa 2 tôi sẽ cần phải giảm số lượng ký tự cần thiết cho mỗi dòng và đặt nó ở giữa với sed.
Ninsto

2. Có, ngoại trừ "../Encoding"
Ninsto

3. Tôi giả sử bạn có nghĩa là "sed -e 's / ^ / ffmpeg -i /' createdscript >> createdscript2" nó thêm ffmpeg -i vào trước mỗi dòng để nói với ffmpeg là đầu vào. Nếu bạn đang nói về "prefixedfiles = $ (cat ./Temp/prefixedfiles.txt)" thì đó là một biến để bash đọc ra vì cat sẽ chỉ xuất ra một dòng mới.
Ninsto

bash = echo trong 3.
Ninsto

Câu trả lời:


0

Theo nhận xét của tôi, tôi nghĩ logic của kịch bản bạn cung cấp là thiếu sót - cụ thể là tôi không thấy sed có thể kết hợp 2 tệp đầu vào trên cơ sở mỗi hàng như thế nào (tôi không nghĩ nó hoạt động theo cách bạn nghĩ nó làm)

Tôi đã đưa ra một giải pháp thay thế cho bạn -

#! /bin/bash

export IFS=$'\n'

(
for LINE in `paste Temp/files.txt Temp/prefixedfiles.txt`
do
    F1=`echo $LINE | cut -f1`
    F2=`echo $LINE | cut -f2`    
    echo "ffmpeg -i $F1 -vcodec libx264 -acodec copy -threads 10 -crf 18 $F2"

done 
) > generatedscript3

Giải trình:

Dòng xuất IFS thay đổi ký tự tách tệp thành dòng mới - điều này có nghĩa là khoảng trắng trong tệp sẽ được xử lý chính xác.

Phép thuật xảy ra trong vòng lặp LINE - lệnh "dán" hợp nhất 2 tệp thành một đầu ra được phân tách bằng một tab, sau đó được xử lý từng dòng một.

F1 và F2 tách 2 phần của đầu vào thành các biến, sau đó được in bằng cách sử dụng dòng echo.

Toàn bộ đầu ra này được ghi lại vào một tệp có tên là createdscript3 (vì vòng lặp và tiếng vang nằm giữa các dấu ngoặc)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.