如何用AWK命令以冒号分隔合并两文件生成指定输出
用AWK实现两个文件内容的笛卡尔积输出
要实现将文件1的每一行与文件2的所有行按行1内容:行2内容格式配对输出,本质是求两个文件内容的笛卡尔积,用AWK可以通过以下方式实现:
核心命令
NR==FNR{arr[++len]=$0; next} {for(i=1;i<=len;i++) print $0":"arr[i]} 文件2 文件1
命令解释
NR==FNR:AWK中NR是当前处理的总记录数,FNR是当前处理的当前文件的记录数。当处理第一个传入的文件(此处为文件2)时,NR等于FNR,此时将文件2的每一行内容存入数组arr,next跳过后续语句,继续处理下一行。- 当处理第二个传入的文件(文件1)时,遍历数组
arr的所有元素,将当前行内容与数组元素用冒号拼接后打印,即可得到文件1每行对应文件2所有行的配对结果。
示例执行
假设文件1名为f1.txt,文件2名为f2.txt,直接执行以下命令即可生成目标输出:
awk 'NR==FNR{arr[++len]=$0; next} {for(i=1;i<=len;i++) print $0":"arr[i]}' f2.txt f1.txt
内容的提问来源于stack exchange,提问作者Vickyz Setiawan
相关产品推荐
相关产品推荐

