Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 比较2个输入文件并重新排序_String_File Io_Awk - Fatal编程技术网

String 比较2个输入文件并重新排序

String 比较2个输入文件并重新排序,string,file-io,awk,String,File Io,Awk,我是awk的新手 我有两个名为file1和file2的输入文件 file1的每条记录都具有文本形式:X,其中X是某个字符串 file2的每条记录都有文字形式:abY,其中Y也是一些字符串,ab是一个两个字母的变量前缀 文件1中的记录数与文件2中的记录数相同 Y的集合只是X集合的重新排序 我想用一行代码来比较文件1(形式为X)的每一行和文件2(形式为abY)的每一行,这样当X与abY中的Y匹配时,将abY打印到名为file3的输出文件 我已经为此挣扎了几天了。我尝试过根据类似的堆栈问题修改许多单行

我是awk的新手

我有两个名为file1和file2的输入文件

file1的每条记录都具有文本形式:X,其中X是某个字符串

file2的每条记录都有文字形式:abY,其中Y也是一些字符串,ab是一个两个字母的变量前缀

文件1中的记录数与文件2中的记录数相同

Y的集合只是X集合的重新排序

我想用一行代码来比较文件1(形式为X)的每一行和文件2(形式为abY)的每一行,这样当X与abY中的Y匹配时,将abY打印到名为file3的输出文件

我已经为此挣扎了几天了。我尝试过根据类似的堆栈问题修改许多单行程序,这些问题涉及两个输入文件的awk字符串比较,但没有得到预期的结果

非常感谢您的帮助。

您可以尝试以下方法:

awk 'FNR<NR {if(substr($0,3) in buf) print $0; next;} {buf[$0]=0}' file1 file2

awk'FNR这里有一行代码可以完成这项工作。我相信有更优雅的方式来做到这一点


awk'NR==FNR{a[$0];next}{for(a中的i)if(substr(i,3)==0){print i}}file2 file1>file3

谢谢你的帮助,@SomeGuy。您的代码输出文件2的内容(即,它按照在文件2中找到的顺序打印字符串格式abY)-这也是我在挣扎之前所得到的。我尝试的是根据Y(文件1的X的匹配项)在文件1中出现的顺序输出字符串格式abY。