Я не совсем понимаю, о чем вы просите, но если вы хотите, чтобы пользователь мог вводить несколько строк, а затем обрабатывать все строки целиком, вы можете использовать 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
Что-то вроде этого должно работать.
Вы можете использовать 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"
Что ж, предположим, что все поля разделены одним пробелом, вы можете попробовать это:
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
Заголовок, который попадает в отдельный файл, вы должны скопировать сами.