我能够有效地解析一个简单的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}/ {} +
执行查找和替换,这就是为什么我试图将结果放在一行中的原因。