首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用命令行工具合并2个文件

使用命令行工具合并2个文件
EN

Stack Overflow用户
提问于 2015-02-17 08:13:38
回答 1查看 69关注 0票数 0

我是2个csv文件,如下所示:

代码语言:javascript
复制
id, name, job
1, bob, fireman
3, alice, nurse
7, peter, policeman
...

和:

代码语言:javascript
复制
id, name, age
2, john, 26
4, craig, 32
5, mary, 45
6, lucy, 23
...

如您所见,它们都是按in排序的,而第一个csv中缺少的in实际上在第二个csv中。

是否可以通过命令行工具(如awk )或类似的工具将这2 csv合并成如下所示的命令行工具?

代码语言:javascript
复制
id, name, job, age
1, bob, fireman,
2, john, , 26
3, alice, nurse,
4, craig, , 32
...

非常感谢你的帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 08:27:58

这应该可以做到:

代码语言:javascript
复制
awk -F, -v OFS=, 'FNR==NR && FNR>1 {a[$1]=$0;c++;next} FNR>1{$NF=" ,"$NF;a[$1]=$0;c++} END {print "id, name, job, age";for (i=1;i<=c;i++) print a[i]}' file1 file2
id, name, job, age
1, bob, fireman
2, john, , 26
3, alice, nurse
4, craig, , 32
5, mary, , 45
6, lucy, , 23
7, peter, policeman

它的工作原理:

代码语言:javascript
复制
awk -F, -v OFS=, '              # Set input and output Field separator to ","
FNR==NR && FNR>1 {              # For first file except first record do:
    a[$1]=$0                    # Store records inn to array "a"
    c++                         # Increment "c" for every record
    next}                       # Skip to next record
FNR>1 {                         # For second file except first record do:
    $NF=" ,"$NF                 # Replace last record with an extra ","
    a[$1]=$0                    # Store records inn to array "a"
    c++}                        # Increment "c" for every record
END {                           # When all file is read do:
    print "id, name, job, age"  # Print header
    for (i=1;i<=c;i++)          # Loop "c" times
        print a[i]}             # Print records
' file1 file2                   # Read the files

在读取多个文件以区分要处理的文件时,经常使用FNR==NR

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28557399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档