awk从非现有的第一列创建新文件

时间:2017-08-01 03:46:54

标签: bash shell unix awk

我们说我有"文件1"内容如下:

    123|abc|def|
    456|ghi|jkl|
    789|mno|pqr|

我有"文件2"内容如下:

    123|abc|def|
    456|ghi|jkl|
    789|mno|pqr|
    134|rst|uvw|

正如你所看到的那样" 134"因此,我的shell脚本应该创建一个文件3,其中包含如下内容。

    134|rst|uvw|

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

在awk中:

$ awk -F\| 'NR==FNR{a[$1];next}$1 in a==0' file1 file2    # > file3
134|rst|uvw|

说明:

$ awk -F\| '     # field separator is |
NR==FNR {        # process first file
    a[$1]        # store the velue in the first field to hash a
    next         # next record
}                # below, processing the second file
$1 in a==0       # if first field is not found in the hash a, output the record
' file1 file2    # > file3 redirect to file3 if desired, else it's on your screen

基本上,它将file1的第一个字段值存储到哈希a,而处理file2会打印出a中找不到第一个字段的记录。所以它与grep解决方案不同,后者比较整个记录,而不仅仅是一个字段。