解析和处理CSV内容

时间:2019-04-28 07:24:38

标签: bash shell

我能够有效地解析一个简单的2列csv,但是我不能在同一行中多次使用这些组件或将它们乱序使用。我怎么可能解决这个问题?

#!/bin/bash

export IFS=','

while read col1 col2 
do 
   echo "${col2} to get turned into ${col1}.${col2}"
done < ./table_targetting_list.csv

样本输入:

sA,t1 
sA,t2
sB,t3
sB,t4

所需的输出:

t1 to get turned into sA.t1
t2 to get turned into sA.t2
t3 to get turned into sB.t3
t4 to get turned into sb.t4

在MacOS上运行上面的代码时,我得到了:

to get turned into sA.t1
to get turned into sA.t2
to get turned into sB.t3
to get turned into sb.t4

我已经四处移动,甚至尝试设置中间变量以保持优先级可接受。 如果我在单独的行中回显,则可以得到任意数量的输出,但是如果我尝试将变量操纵成可以颠倒一行的列的顺序,那么结果对我来说是不正确的。看来,如果我在1之前要求2,那么我只会得到2。如果在2之前的1之前要求2,那么我可以得到1。2。对于引起这些结果的原因非常好奇。

我什至尝试使用awk,但没有取得更好的结果。

awk -F "," '{ print $2 $1}' table_targetting_list.csv

cat schema_targetting_list.csv | awk -F "," '{ print $2, $1 }'

是否有一种简单的方法可以在shell中执行类似的操作?

如果没有,也许还有另一种方法可以实现我的最终目标(在csv中逐行)查找第二个值的所有实例,并用与第二个值配对的第一个值替换它。本质上是遍历table_names的列表,然后像下面这样将schema_name附加到它们:schema_names.table_names

我目前正在使用

find . -type f -name '*.sql' -exec sed -i '' s/${2}/${1}.${2}/ {} +

执行查找和替换,这就是为什么我试图将结果放在一行中的原因。

0 个答案:

没有答案