使用awk打印值

时间:2015-05-25 11:12:52

标签: shell awk

我需要使用file1命令将某些固定值以及其他文件file2awk中的值打印到新文件输出中。

文件1:

100,1
102,3
104,4

file2的:

103,4
108,6
109,7

我的命令

我在粘贴命令的帮助下做了: 在file1中:前4个字段存在 在file3中:file1和file2之间的内容 使用paste命令合并所有文件。我想直接这样做而不使用粘贴命令     awk -F' {print" 100",0,1,contents_of_file1," 1"," 0",contents_of_file2}' >输出

输出:

100,0,1,100,1,1,0,103,4
100,0,1,102,3,1,0,108,6
100,0,1,104,4,1,0,109,7

前3个值默认固定,第4和第5列值来自file1,6和第7列值是固定的默认值,后2列是file2的内容

1 个答案:

答案 0 :(得分:2)

通过将第一个文件的内容保存到缓冲区,可以在一次awk调用中完成整个操作:

awk -v OFS=, 'NR==FNR{a[NR]=$0;next}{print "100,0,1",a[FNR],"1,0",$0}' file1 file2

第一个块上的NR==FNR条件意味着它仅针对第一个文件运行,其中总记录数等于当前文件的记录号。使用记录号作为索引,将第一个文件中的每一行保存到数组anext会跳过任何进一步的陈述。

对于第二个文件,将跳过第一个块,因为NR不再等于FNR。使用与第一个文件中相同记录对应的数组中的值,以及当前记录的固定值和内容$0。输出中的每个字段由OFS分隔,paste -d, file1 file2 | awk -F, -v OFS=, '{print "100,0,1",$1,$2,"1,0",$3,$4}' 已设置为逗号。

或者,您可以使用粘贴同时输入两个文件的内容:

paths: {
    'angular': requirejs.cardBaseLibBaseUrl + 'angular/angular',
    'angular-route': requirejs.cardBaseLibBaseUrl + 'angular-route/angular-route',
    // other things
    'ngDraggable': requirejs.cardBaseLibBaseUrl + 'ngDraggable-master/ngDraggable'
},
shim: {
    'angular' : {
        deps: ['jquery'], 
        'exports' : 'angular'
    },
    'angular-route': ['angular'],
    // other things
    'ngDraggable' : {
        deps: ['angular']
    }