Я собираюсь переформатировать ваши данные как:
ДАННЫЕ
Col #1 Col #2
===== ====
data1 123
data2 456
CSV
Col #1 Col #2
==== ====
csv 123
csv2 456
Правильно ли настроена эта настройка?Я знаю, что это будут файлы CSV, но я хочу убедиться, что я понимаю ваши данные структура .
Теперь вы сказали:
I [...] хочу получить для каждого из $ col1. Я хочу увидеть, равняется ли $ col1 каким-либо из данных первого столбца переменной $ data.
Вы хотите сопоставить столбец № 1 из ДАННЫЕ со столбцом № 1 из CSV .В вашем наборе два столбца № 1 из обоих наборов не совпадают.Вы имели в виду Колонку № 2?
Я предполагаю, что ваши окончательные результаты должны выглядеть следующим образом:
DATA
CVS Value Col #1 Col #2
========= ====== ======
csv data1 123
csv2 data2 456
(но в формате CSV, конечно).
Это правильно?
Если у вас достаточно современная версия BASH, вы можете использовать ассоциативные массивы.Это позволяет вам иметь понятие ключ , равный значению .
Допустим, вы создаете ассоциированный массив из DATA и CSV, где массив имеет ключпо столбцу № 2 вы можете затем пройти через массив и определить, есть ли соответствующее значение, и вывести данные так, как вам нужно.
Вы можете установить значение ассоциативного массива следующим образом:
my_array[key]="value"
Вы можете получить значение, связанное с ключом, как это:
echo "${my_array[key]}"
Вы можете получить список всех значений, как это:
echo "${my_array[*]}"
Вы можете получить все ключивот так:
echo "${my_array[@]}"
Вот быстрая и грязная программа.Вы, вероятно, хотите что-то проверить, что у вас нет дубликатов ключей при создании массива, и что конкретный ключ имеет значение, связанное с ним при печати массива:
#! /bin/bash
csv="csv,123
csv2,456"
data="data1,123
data2,456"
# Create the Data Array Hash keyed by Col #2
while IFS="," read -r col1 col2
do
data_array[$col2]=$col1
done <<EOD
$data
EOD
# Create the CSV Array Hash keyed by Col #2
while IFS="," read -r col1 col2
do
csv_array[$col2]=$col1
done <<EOD
$csv
EOD
#For each key in Data Hash, print out corresponding keyed value in CSV Hash
for key in "${!data_array[@]}"
do
echo "$key: ${data_array[$key]} ${csv_array[$key]}"
done