#!/bin/bash
INPUT_FILE=order.list
OUTPUT_FILE=final.txt
# Empty the output file
>${OUTPUT_FILE}
while read COUNTRY
do
FILENAME=$(echo ${COUNTRY} | tr '[A-Z]' '[a-z]')
cat ${FILENAME}.txt >> ${OUTPUT_FILE}
done < ${INPUT_FILE}
Eu tenho uma lista que corresponde a um arquivo. Esses arquivos devem ser anexados a um único arquivo com base em sua ordem na lista.
order.list:
FLORIDA #corresponding file is florida.txt
ILLINOIS #corresponding file is illinois.txt
UTAH #corresponding file is utah.txt
Usando o order.list
acima, eu tenho que acrescentar os arquivos .txt
usando a ordem utah.txt, seguido por florida.txt e illinois.txt
scenario 1:
order.list:
UTAH
FLORIDA
ILLINOIS
cat utah.txt >> final.txt
cat florida.txt >> final.txt
cat illinois.txt >> final.txt
scenario 2:
order.list:
ILLINOIS
UTAH
cat illinois.txt >> final.txt
cat utah.txt >> final.txt
Além da alteração da ordem da lista, às vezes, order.list
pode conter apenas duas ou uma linha.
Eu poderia tentar uma declaração if, mas isso poderia demorar muito. Existe uma maneira eficiente de lidar com isso?
Que tal isso:
rm final.txt & cat order.list | tr '[:upper:]' '[:lower:]' | while read line; do cat $line.txt >> final.txt; done
Primeiro, o final.txt existente é excluído, do que o order.list é lido e convertido em minúsculas (de acordo com a entrada que você forneceu) e, em seguida, anexado na ordem de leitura.
Tags bash sort scripting shell-script