我有两个CSV文件
csv 1:
a0,|a1|a2|a3|
b0,|b1|b2|b3|
c0,|c1|c2|c3|
csv 2:
a2,5
a3,7
c3,10
d6,3
b2,6
输出(可以不排序):
a0,a2(5);a3(7)
b0,b2(6)
c0,c3(10)
others,d6(3)
我尝试使用grep并做到了。但我认为这将是冗长且耗时的。
#My tried code
while IFS= read -r line
do
f=$(echo "$line" | cut -d, -f1)
f1=$(echo "$line" | cut -d, -f2)
echo "$(cat csv1.csv | grep "|$f|" | cut -d, -f1),$f($f1)" >> output
done < csv2.csv
输出我能够产生的东西
a0,a2(5) a0,a3(6) c0,c3(6)
有人可以帮助我实现shell脚本中预期的输出吗?
答案 0 :(得分:0)
编辑: :由于OP更改了定界符,因此请立即添加此解决方案(使用所示示例进行编写和测试)。
awk '
FNR==NR{
gsub(/^ +| +$/,"",$3)
a[$1]=$2
next
}
{
num=split($2,array,"|")
}
{
for(i=1;i<=num;i++){
if(array[i] in a){
val=(val?val ";":"")array[i] "(" a[array[i]] ")"
}
}
$2=val
val=""
}
1
' FS="," OFS="," file2 file1
请您尝试以下。
awk '
FNR==NR{
gsub(/^ +| +$/,"",$3)
a[$2]=$3
next
}
FNR==1{
print
next
}
{
num=split($3,array,",")
}
{
for(i=1;i<=num;i++){
if(array[i] in a){
val=(val?val ",":"")array[i] "(" a[array[i]] ")"
}
}
$3=val
val=""
}
1
' FS="|" OFS="|" Input_file2 Input_file1