[email protected] status
[email protected] status
[email protected] status
[email protected] unique_user_id
[email protected] unique_user_id
[email protected] unique_user_id
Мой пример кода:
While read c1.f1 c2.f1 c1.f2 c2.f2;
Do
Echo “$c2.f2 $c2.f1”
Done<paste data.csv data2.csv
Этот код напечатает мне значения во 2-х столбцах обоих файлов, но мне нужна какая-то проверка перед этим, например, добавление «оператора if», чтобы проверить, равны ли идентификаторы электронной почты пользователей в первых столбцах в обоих файлах, прежде чем печатать 2-й столбец. . Я хочу напечатать unique_user_id и статус только путем сопоставления идентификатора электронной почты. Могу ли я это сделать? Или я могу сделать это лучше с помощью команды awk и как лучше всего это сделать? Спасибо
К вашему сведению, CSV == значения, разделенные запятыми. В ваших файлах нет запятых :-)
Вот небольшой сценарий, который я придумал:
#!/bin/bash
# using your method
paste data.csv data2.csv | while read file1_email file1_value file2_email file2_value
do
if [ "$file1_email" == "$file2_email" ]
then
echo "$file1_email, $file1_value, $file2_value"
fi
done
echo "------------------------------------------"
# this is mine
while read file1_email file1_value
do
file2_counter=$(grep -c $file1_email data2.csv)
if [ $file2_counter -gt 0 ]
then
file2_line=$(grep $file1_email data2.csv)
file2_value=$(echo $file2_line | awk '{print $2}')
echo "$file1_email, $file1_value, $file2_value"
fi
done <data.csv
paste
ничего не сортирует, а просто отображает данные по мере их чтения.Если вы воспользуетесь моим методом, он будет перебирать каждую строку data.csv. Но data.csv должен быть "чистым", поскольку read
предполагает 2 поля. Первый - это адрес электронной почты, второй - значение. Вам следует взглянуть на содержимое data.csv.
Затем время от времени он проверяет, присутствует ли электронное письмо, прочитанное из data.csv, в data2.csv. Если это не так, ничего не делается (нет else
в if
). Но если вы все равно хотите что-то сделать, добавьте else
и немного кода.
Привет, Ник, Большое спасибо за быстрый ответ! Ваш метод работает для меня, но почему-то не хватает нескольких строк данных или идентификаторов электронной почты. Это связано с тем, что если в какой-либо строке не найден соответствующий шаблон, выполнение останавливается. как лучше всего решить эту проблему? Еще раз большое спасибо за вашу помощь в этом! :) @ Nic3500
Я добавил в ответ несколько комментариев.
Добавьте shebang, а затем вставьте туда свой скрипт: shellcheck.net