Заполните столбец CSV в соответствии со значением другого столбца - PullRequest
1 голос
/ 21 октября 2019

В скрипте Bash я хочу заполнить один в настоящее время пустой столбец (столбец 5) в соответствии со значениями другого (столбец 1).

Я думаю, что могу использовать awk для достиженияжелаемый результат, но у меня проблемы с синтаксисом:

awk -F, '
$1~/sld_[a-z]{3}[0-9]{4}_[0-9]{4}_f_[0-9]{3}[a-z]\.tif$/{$5="Text"}
$1~/sld_[a-z]{3}[0-9]{4}_[0-9]{4}_[a-b]_[0-9]{1,3}[a-z]?\.tif$/{$5="Front matter"}
$1~/sld_[a-z]{3}[0-9]{4}_[0-9]{4}_y_[0-9]{1,3}[a-z]?\.tif$/{$5="Back matter"}
$1~/sld_[a-z]{3}[0-9]{4}_[0-9]{4}_z_1[a-z]?\.tif$/{$5="Back matter"}
' file.csv

Мой ввод выглядит следующим образом:

File Name,Item Sequence,Visibility,Title
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0001_a_1.tif,1,discovery,Front Board Outside
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0002_a_1a.tif,2,discovery,Front Board Outside
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0003_b_000.tif,3,discovery,Front Board Inside
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0009_b_003v.tif,9,discovery,Flyleaf 003v
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0010_f_001r.tif,10,discovery,f. 001r
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0060_y_001r.tif,60,discovery,Flyleaf 001r
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0070_y_999.tif,70,discovery,Back Board Inside
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0071_z_1.tif,71,discovery,Back Board Outside
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0072_z_1a.tif,72,discovery,Back Board Outside
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0073_z_2.tif,73,discovery,Spine
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0074_z_3.tif,74,discovery,Fore edge

И желаемый результат должен выглядеть так, как показано ниже, где пятыйстолбец (IIIF Range) заполнен значениями, которые я присвоил выше (Front matter, Text, Back matter и пусто) на основе значений столбца 1 (File Name):

File Name,Item Sequence,Visibility,Title,IIIF Range
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0001_a_1.tif,1,discovery,Front Board Outside,Front matter
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0002_a_1a.tif,2,discovery,Front Board Outside,Front matter
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0003_b_000.tif,3,discovery,Front Board Inside,Front matter
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0009_b_003v.tif,9,discovery,Flyleaf 003v,Front matter
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0010_f_001r.tif,10,discovery,f. 001r,Text
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0060_y_001r.tif,60,discovery,Flyleaf 001r,Back matter
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0070_y_999.tif,70,discovery,Back Board Inside,Back matter
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0071_z_1.tif,71,discovery,Back Board Outside,Back matter
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0072_z_1a.tif,72,discovery,Back Board Outside,Back matter
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0073_z_2.tif,73,discovery,Spine,,  
Masters/sinaimasters/ara/arabic_0695/sld_arb0695_0074_z_3.tif,74,discovery,Fore edge,,

1 Ответ

2 голосов
/ 21 октября 2019

Вы можете использовать оператор ~ для сопоставления строки с шаблоном регулярного выражения:

awk -F, 'BEGIN{OFS=","}
$1~/sld_[a-z]{3}[0-9]{4}_[0-9]{4}_f_[0-9]{3}[a-z]\.tif$/{$5="Text"}
$1~/sld_[a-z]{3}[0-9]{4}_[0-9]{4}_[a-b]_[0-9]{1,3}[a-z]?\.tif$/{$5="Front matter"}
$1~/sld_[a-z]{3}[0-9]{4}_[0-9]{4}_y_[0-9]{1,3}[a-z]?\.tif$/{$5="Back matter"}
$1~/sld_[a-z]{3}[0-9]{4}_[0-9]{4}_z_1[a-z]?\.tif$/{$5="Back matter"}
1' file.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...