我正在使用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
它提供了理想的输出。