对于JOIN命令的变化,需要一个基于UNIX的preline

时间:2016-08-11 06:36:00

标签: unix join awk

我需要一个单行(我可以放入dos批处理文件),最好使用像AWK或JOIN这样的unix命令。我需要的功能本质上是以下JOIN命令的更精细版本:

join -j 1 -a 1 file1.txt file2.txt -t "^" > output.txt

[演练:字段分隔符是" ^",连接键是两个字段的第一个字段,并且不完全确定" -a 1"正在做的确切,但它是在另一个文件的行的末尾粘贴要加入的位,这就是我想要的。

现在,这个单线程工作正常,两个文件都被排序,第二个文件中只有一个匹配的行...但我需要它尝试匹配第二个文件中的4行。

E.g.
file1:

12^blahblah
13^blahblahblahblah
14^blahblahblahblahblahblahblahblah

file2:

12^banana
12^orange
12^apple
13^potato
14^tomato

所以我想要这样的输出:

12^blahblah^banana,orange,apple
13^blahblahblahblah^potato
14^blahblahblahblahblahblahblahblah^tomato

[不必用逗号分隔新项目]

2 个答案:

答案 0 :(得分:2)

您可以尝试此awk命令:

awk -F'^' 'NR==FNR{if($1 in a){a[$1]=a[$1]","$2} else {a[$1]=$2}} NR>FNR{print $0 "^" a[$1]}' file2 file1

脚本使用a的内容填充数组file2,并在解析file1

时附加数组的内容

答案 1 :(得分:1)

$ awk -F'^' 'NR==FNR{a[$1]=$0 FS;next} {a[$1] = a[$1] s[$1] $2; s[$1]=","} END{for (i in a) print a[i]}' file1 file2
12^blahblah^banana,orange,apple
13^blahblahblahblah^potato
14^blahblahblahblahblahblahblahblah^tomato