Linux 用bash总结

Linux 用bash总结,linux,bash,echo,Linux,Bash,Echo,我有一些通过SQL获取的数据。我需要总结一下没有sql的bash abc=`sudo -u postgres psql admin -t -c "select * from table"` echo "$abc" A B C D dt=`sudo -u postgres psql admin -t -c "slecet * from table"` echo "$dt" 1 2 3 4 此外,还包含了一些文件 1

我有一些通过SQL获取的数据。我需要总结一下没有sql的bash

abc=`sudo -u postgres psql admin -t -c "select * from table"`
echo "$abc"
A
B
C
D

dt=`sudo -u postgres psql admin -t -c "slecet * from table"`
echo "$dt"
1
2
3
4
此外,还包含了一些文件

1/x
1/y
2/y
2/z
3/z
4/x
4/y
4/z
我想这样输出:

1 A | x, y
2 B | x, z
3 C | z
4 D | x, y, z
我尝试了一些代码,但总是失败

paste -s -d <(echo "$dt" | while read n; do echo -n " ";done) <(echo "$abc";done ) <(echo find .././ ;done)

A
x
y
z
B
x
y
z
C
x
y
z
D
1
2
3
4
so on..

paste-s-d使用GNU awk并期望数据在文件中(
file1
abc
数据,
file2
dt
):


如果这是一个连续的问题,您可能需要检查GNU awk的pgsql扩展。

使用GNU awk并希望数据位于文件中(
file1
abc
数据,
file2
dt
):


如果这是一个连续的问题,您可能需要查看GNU awk的pgsql扩展。

在数据库中进行汇总可能更容易,但您特别需要一个bash解决方案。我删除了SQL标记。@ÖmerTahaCam:将数据存储到数组中而不是使用字符串标量不是更有意义吗?您在处理阵列时更加灵活。谢谢@GordonLinoff@user1934428是的,使用数组更有意义。但无法将它们转换为数组。我尝试了IFS来转换数组。我的场景是这样的。
readarray
是转换为数组的合适工具,假设有bash 4.0或更新版本。在旧版本的bash中,可以使用
read-a
。请参阅为什么在不适当的情况下使用
array=($value)
在IFS上拆分。在数据库中进行汇总可能更容易,但您特别需要一个bash解决方案。我删除了SQL标记。@ÖmerTahaCam:将数据存储到数组中而不是使用字符串标量不是更有意义吗?您在处理阵列时更加灵活。谢谢@GordonLinoff@user1934428是的,使用数组更有意义。但无法将它们转换为数组。我尝试了IFS来转换数组。我的场景是这样的。
readarray
是转换为数组的合适工具,假设有bash 4.0或更新版本。在旧版本的bash中,可以使用
read-a
。请参阅为什么在不适当的情况下使用
array=($value)
在IFS上拆分。
$ gawk '
ARGIND==1 {                                    # process abc data
    a[FNR]=$0                                  # hash to a
    n++                                        # abc and dt expected to have
    next                                       # same number of records
}
ARGIND==2 {                                    # process dt data
    b[FNR]=$0                                  # hash to b
    next
}
split($0,t,/\//) {                             # process the third set
    c[t[1]]=c[t[1]] (c[t[1]]==""?"":", ") t[2] # hash to c appending
}
END {                                          # in the end
    for(i=1;i<=n;i++)                          # n is used
        printf "%s %s | %s\n",b[i],a[i],c[i]   # output
}' file1 file2 file3
1 A | x, y
2 B | y, z
3 C | z
4 D | x, y, z