Извлечение информации из csv в несколько файлов

Я не совсем понимаю, о чем вы просите, но если вы хотите, чтобы пользователь мог вводить несколько строк, а затем обрабатывать все строки целиком, вы можете использовать mapfile. Он принимает пользовательский ввод до тех пор, пока не встретится EOF, а затем возвращает массив, каждая строка которого является элементом массива.

ПРОГРАММА.ш

#!/bin/bash

myfunction () {
    echo "$@"
}

SENTANCE=''
echo "Enter your input, press ctrl+D when finished"
mapfile input   #this takes user input until they terminate with ctrl+D
n=0
for line in "${input[@]}"
do
    ((n++))
    SENTANCE+="\n$n\t$(myfunction $line)"
done
echo -e "$SENTANCE"

Пример

$: bash PROGRAM.sh
Enter your input, press ctrl+D when finished
this is line 1
this is line 2
this is not line 10
# I pushed ctrl+d here

1   this is line 1
2   this is line 2
3   this is not line 10
-1
30.08.2021, 11:14
2 ответа

Что-то вроде этого должно работать.

Вы можете использовать awkдля разделения и создания файлов, а затем p7zipдля шифрования.

for f in file; do
    awk ' /Alabama/ { print > "Alamaba.txt" } /Oklahoma/ { print > "Oklahoma.txt" }' $f
    7z a -p -mx=9 -mhe -t7z states.7z Alabama.txt Oklahoma.txt
    #7z a -p -mx=9 -mhe -t7z Alabama.7z Alabama.txt
    #7z a -p -mx=9 -mhe -t7z Oklahoma.7z Oklahoma.txt
done

awkсопоставляется и печатается непосредственно в выходной файл.

p7zipсоздаст зашифрованный 7zфайл, в данном случае названный state.7z

.
-a: Add files to archive

-p: Prompt for a password

-mx=9: Compression level

-mhe: Encrypt file names

-t7z: Generate a 7z archive 

Для восстановления данных используйте:

7za e states.7z

Выход

cat Alamaba.txt
2 "99"; "Alabama", "Joe"; "Ill"
3 "100"; "Alabama", "Mary", "Ill"

cat Oklahoma.txt
4 "101", "Oklahoma", "Joseph", "Ill"
0
30.08.2021, 12:01

Что ж, предположим, что все поля разделены одним пробелом, вы можете попробовать это:

while read SAMPLE REGION REST; do OUT=$(sed s/'[",;]'//g <<<$REGION);echo "$SAMPLE $REGION $REST" >>$OUT.csv; done < all.csv

Если между полями нет пробела, вы можете изменить внутренний разделитель полей, используя IFS= в следующем примере:

while IFS="," read SAMPLE REGION REST; do OUT=$(sed s/'[",;]'//g <<<$REGION);echo "$SAMPLE $REGION $REST" >>$OUT.csv; done < all.csv

Заголовок, который попадает в отдельный файл, вы должны скопировать сами.

0
30.08.2021, 12:21

Теги

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