小编jfg*_*956的帖子

awk有条件地组合多行

如果它们匹配ID,我想将来自不同长度的多行的值组合成一行.

输入示例是:

ID:  Value:
a-1  49
a-2  75
b-1  120
b-2  150
b-3  211
c-1  289
d-1  301
d-2  322
Run Code Online (Sandbox Code Playgroud)

期望的输出示例是:

ID:  Value:
a 49,75
b 120,150,211
c 289
d 301,322
Run Code Online (Sandbox Code Playgroud)

我如何编写awk表达式(或sed或grep或其他东西)来检查ID是否匹配,然后将所有这些值打印到一行?我当然可以将它们打印到不同的列中并稍后将它们组合起来,所以问题实际上只是有条件地打印,如果ID匹配并且如果没有开始新行.

awk grep sed

6
推荐指数
1
解决办法
6710
查看次数

从两个文件读取变量并以第三个文件的模式输出

我有 2 个如下文件:

文件1:

a1,b1,c1,d1,e1,f1,g1,h1
a2,b2,c2,d2,e2,f2,g2,h2
a3,b3,c3,d3,e3,f3,g3,h3
a4,b4,c4,d4,e4,f4,g4,h4
Run Code Online (Sandbox Code Playgroud)

文件2:

x1,y1,z1
x2,y2,z2
x3,y3,z3
x4,y4,z4
Run Code Online (Sandbox Code Playgroud)

我想同时读取两者并以如下模式输出变量:

a1,b1,c1,d1,x1,e1,f1,y1,g1,z1,h1
a2,b2,c2,d2,x2,e2,f2,y2,g2,z2,h2
a3,b3,c3,d3,x3,e3,f3,y3,g3,z3,h3
a4,b4,c4,d4,x4,e4,f4,y4,g4,z4,h4
Run Code Online (Sandbox Code Playgroud)

好消息 - 我已经成功实现了!

坏消息 - 太多的数组和 while 循环(太多的计算!)。我正在寻找更简单的东西,因为脚本必须读取大量数据(4k 行和 1M 字)。

限制 - BASH shell(可能不是限制!)

这就是我所做的

exec 5<file1 # Open file into FD 5
exec 6<file2 # Open file into FD 6

while IFS=$"," read -r line1 <&5
IFS=$"," read -r line2 <&6
do
    array1=( `echo $line1` )
    array2=( `echo $line2` )
    array3=("${array1[@]}","${array2[@]}")
    echo ${array3[@]} >> tmpline
done
while IFS="," read var1 …
Run Code Online (Sandbox Code Playgroud)

arrays bash shell exec while-loop

2
推荐指数
1
解决办法
341
查看次数

标签 统计

arrays ×1

awk ×1

bash ×1

exec ×1

grep ×1

sed ×1

shell ×1

while-loop ×1