在shell中编写不同的文件

时间:2014-08-08 21:54:05

标签: shell

我正在尝试将两个文件的差异写入一个输出文件。 ie)file1的内容,但不是file2的内容。

ex: cat file1
sam
robson
guugb


cat file2
sam
michg
Jay

对于上面的内容,我想要file2的内容,而不是在file2中的内容必须写入file2本身。所以最终的输出将是:

cat file2
sam
michg
Jay
robson
guugb

任何人都可以提供帮助。

2 个答案:

答案 0 :(得分:0)

需要注意的是,订购将会丢失:

cat file1 file2 | sort -u >combined && mv combined file2

答案 1 :(得分:0)

使用join

join -a2 --nocheck-order file1 file2 > tmp && mv tmp file2

使用awk

awk '
  NR==FNR {names[$1]++; next}
  ($1 in names) {delete names[$1]}
  END {for(name in names) print name >> "file2"}
' file1 file2
  • 将文件1中的名称读入数组
  • 如果文件中存在名称,请从数组中删除它
  • END块中,遍历我们的数组并将名称附加到file2。