Чтение чисел из текстового файла и запись в CSV файл


Фон:

Я недавно начал изучать Баш из-за моей новой работы в компанию VFX. Мы резервного копирования все наши СМИ на LTO ленты (один мастер и один клон). Мне было поручено написание сценария, разделить лист лента Мастер и клон в файл CSV. Я чувствую, что я сделал это в грубой манере, как это был мой первый сценарий, и хотел бы некоторую обратную связь о том, как я мог бы улучшить эффективность / синтаксис / код в целом, так что я могу извлечь из этого опыта.

Вот текст файла: https://1drv.ms/t/s!AkWewdosAYGuhiaBbehlLBF64Qsg

Я выполнив скрипт, назвав его как это:
$ sh /scriptname.sh filename.txt

Код:

#!/bin/bash
# This script will split the presstore list of tapes into a .CSV file with two seperate coloumns.
file="$1"
echo "Splitting tape list....."
touch tempsplit.csv #creates temporary file for use later in script
while IFs= read line
do
    lastchar=$(echo $line | tail -c 2) 
        if [ "$lastchar" == : ]     #Ommits any lines that end with : else error
            then
                echo -ne
        elif [ "$lastchar" -ge 0 -a "$lastchar" -le 9 ]     #Selects lines that end in number
            then
                breakdown=$(echo "$line" | cut -d':' -f2,6) #selects fileds 2 & 6 containing tape numbers
                master=$(echo "$breakdown" | cut -d'a' -f1) #cuts first number
                clone=$(echo "$breakdown" | cut -d':' -f2) #cuts second  number
                final=$(echo -e "$master,$clone" | tr -d ' ' >> tempsplit.txt) #outputs to a temp csv file
        fi
done < $file
touch tapelist_split.csv
awk 'NR % 2 == 0' tempsplit.txt | sort -n >> tapelist_split.csv #removes every 2nd line, sorts numerically, converts to a .CSV file
rm -rf tempsplit.txt #removes tempfile
echo "Complete"

Резюме:

Я не уверен, почему во время чтения заявления не работать, если я не звоню file="$1" как в строке 3 и снова вывод, что varaible в строке 20 done < $file- объяснений по этому было бы здорово.

Я понимаю, что не стоило называть моего первого if, как меня волнуют только цифры, но если я не я получаю сообщение об ошибке: "число ожидается", когда я запускаю сценарий - кто-нибудь знает почему это может быть.

Почему я создаю файл "tempslipt.txt" потому что это мой код, чтобы удалить каждый 2-й строки и отсортировать файл не работает в хитрый заявлении так я поняла, что это чистый способ сделать это.

Мой код может быть не очень эффективным или хорошо, поэтому я прошу советов о том, как я могу уточнить и откорректировать его так, в будущем я смогу написать намного чище скрипты.



153
1
задан 9 марта 2018 в 11:03 Источник Поделиться
Комментарии