我需要一个单行(我可以放入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
[不必用逗号分隔新项目]
答案 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