Как я могу манипулировать данными из одного столбца csv-файла с помощью скрипта Unix?
У меня есть csv, в котором данные выглядят примерно так,
123,Jeff,NY
456,Ross,LA
789,John,OH
Я должен написать скрипт, который манипулирует только первым столбцом и изменяет числа на нужные символы, как показано ниже,
ABC,Jeff,NY
DEF,Ross,LA
GHI,John,OH
Любая помощь ценится. Спасибо.
Ответы - Как я могу манипулировать данными из одного столбца csv-файла с помощью скрипта Unix? / How do I manipulate Data from one column of a csv file using Unix Script?

28.01.2020 07:14:57
perl -F, -ane '$,=","; $F[0] =~ s/([0-9])/chr(ord("A") + $1)/eg; print @F' input

28.01.2020 08:35:32
Простое Баш решение
#!/bin/bash
F="$1"
[ -z "$F" ] && {
echo "Usage: $0 csv-file"
exit 1
}
chars=( {A..Z} )
while IFS= read -r line; do
echo "${chars[($(echo $line | cut -b1)-1)]}${chars[($(echo $line | cut -b2)-1)]}${chars[($(echo $line | cut -b3)-1)]},"$(echo $line | cut -f2- -d,)
done < "$F"
Пояснение:
Получить файл в качестве первого параметра, выйти, если он не задан
F="$1"
[ -z "$F" ] && {
echo "Usage: $0 csv-file"
exit 1
}
Объявить алфавитный массив
chars=( {A..Z} )
Замкните файл и для каждой строки используйте 3 цифры из csv, чтобы получить индекс массива алфавита
while IFS= read -r line; do
echo "${chars[($(echo $line | cut -b1)-1)]}${chars[($(echo $line | cut -b2)-1)]}${chars[($(echo $line | cut -b3)-1)]},"$(echo $line | cut -f2- -d,)
done < "$F"


awk '{printf "%s,", $1 | c; close c; print $2, $3}' c="tr 1-9 A-K" OFS=, FS=, input

29.01.2020 02:46:57
Если в других столбцах есть числа и требуется заменить только первый столбец, можно попробовать создать новый преобразованный столбец (путем извлечения и замены с помощью команд tr и cut, а затем объединения с командами вставки) :
paste -d',' <(cat abc.txt | cut -d"," -f1 | tr 1-9 A-I) abc.txt
ABC,123,Jeff,NY
,
DEF,456,Ross,LA
,
GHI,789,John,OH
Теперь вы можете удалить пустые строки, которые имеют начальную запятую
paste -d',' <(cat abc.txt | cut -d"," -f1 | tr 1-9 A-I) abc.txt|grep -v "^,"
ABC,123,Jeff,NY
DEF,456,Ross,LA
GHI,789,John,OH
Наконец, вы можете выбрать только те столбцы, которые вам нужны, используя команду вырезать :
paste -d',' <(cat abc.txt | cut -d"," -f1 | tr 1-9 A-I) abc.txt|grep -v "^,"| cut -d"," -f2,3,4
123,Jeff,NY
456,Ross,LA
789,John,OH