使用awk比较两个文件时将行连接为变量

时间:2018-01-11 16:47:59

标签: variables awk

我正在使用awk比较两个文件。以下是第一个文件(file1.txt)的表示:

1
15
MRUKLM
GHLKGM
BNUIOK

以下是第二个文件(file2.txt)的表示:

AGHLKMT
MFBGSJY
GSBDGLM

我想根据某些模式比较两个文件。此外,输出文件的第一行应包含第二个文件中的总行数,后跟第一个文件的第二行和第三行。因此,输出文件的标题应如下所示:

3(total lines of second file)
15(second line of first file)
MRUKLM(third line of first file)
certain pattern.....
certain pattern....
certain pattern....

我写了以下代码:

vari=$(wc -l file2.txt)|awk -v lin="" 'NR==FNR{if(NR>1 && NR<4)lin=$lin$0;else a[NR]=$0;next}BEGIN{print vari,lin}match($0,/([0-9]*)_(.*)/,c){print a[2*c[1]+2];print a[2*c[1]+3]}' file1.txt file2.txt> output_file.txt

提取模式的代码部分工作正常,但是,我无法在输出文件中获得任何标头。我得到的输出如下:

certain pattern....
certain pattern....

事实证明我在分配变量时犯了一些错误。以下是更新的代码:

awk -v vari="$(cat file2.txt|wc -l)" 'NR==FNR{if(NR>1 && NR<4)print $0;else a[NR]=$0;next}BEGIN{print vari}match($0,/([0-9]*)_(.*)/,c){print a[2*c[1]+2];print a[2*c[1]+3]}' file1.txt file2.txt > output.txt

它提供了理想的输出。

0 个答案:

没有答案