linux - 使用 bash 和 awk 比较两个文件并更新第二个文件并对第二个文件进行排序

标签 linux bash awk sed

我有两个文件,每个文件有两个列,我想比较两个文件的第一列。如果第一个文件中第一列的值在第二个文件中不存在,那么我想将第一个文件第一列中的值附加到第二个文件,例如

第一个文件.log

1457935407,998181
1457964225,998191
1457969802,997896

secondFile.log

1457966024,1
1457967635,1
1457969802,5
1457975246,2

之后,secondFile.log 应该如下所示:

1457935407,null
1457964225,null
1457966024,1
1457967635,1
1457969802,5
1457975246,2

注意:第二个文件更新后应按第一列排序。

最佳答案

使用 awksort:

awk 'BEGIN{FS=OFS=","} FNR==NR{a[$1]; next} {delete a[$1]; print} END{
         for (i in a) print i, "null"}' firstFile.log secondFile.log |
sort -t, -k1 > $$.temp && mv $$.temp secondFile.log

1457935407,null
1457964225,null
1457966024,1
1457967635,1
1457969802,5
1457975246,2

关于linux - 使用 bash 和 awk 比较两个文件并更新第二个文件并对第二个文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35994777/

相关文章:

linux - 如何在 Linux 中显示过去 5 分钟添加的文件内容而不扫描整个文件?

linux - 将HDFS Hadoop中的最后5个更新文件复制到bash中的目标文件夹

mysql - 在 Fedora 21 上安装 RMySQL

linux - 如何将 Linux GUI 按钮绑定(bind)到命令?

c - 意外输入 62;9;c62;9;c62;9;c62;9;c 在将缓冲区写入标准输出后出现在 shell 中

linux - CentOS Elastix Linux 中的两种路由

string - 解析命令行参数来处理 bash 中的文件列表?

bash - 语法错误 : EOF in backquote substitution

awk - 保留所需数据并删除不需要的数据

linux - 提取括号内的单词并将其替换为句子