[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
这段代码会打印出两个文件的第二列中的值,但我需要在此之前进行某种验证,例如添加“if statement”以检查在打印第二列之前两个文件中第一列中用户的电子邮件ID是否相等。我想通过映射电子邮件ID来打印unique_user_id和状态我可以这样做吗?或者我可以使用awk命令更好地做到这一点,最好的方法是什么?谢谢
这是我想出的一个快速脚本:
#!/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
和一些代码。