Awk 如何在bash中比较两个文本文件的行和列的值?
我有两个文本文件,我想根据它们的行和列比较它们对应的值。通过比较,我的意思是检查值是否相等,以及Awk 如何在bash中比较两个文本文件的行和列的值?,awk,Awk,我有两个文本文件,我想根据它们的行和列比较它们对应的值。通过比较,我的意思是检查值是否相等,以及echo值是否相同。以下是文件: file1.txt Name Col1 Col2 Col3 ----------------------- row1 1 4 7 row2 2 5 8 row3 3 6 9 file2.txt Name Col1 Col2 Col3 ----------
echo
值是否相同。以下是文件:
file1.txt
Name Col1 Col2 Col3
-----------------------
row1 1 4 7
row2 2 5 8
row3 3 6 9
file2.txt
Name Col1 Col2 Col3
-----------------------
row2 1 4 11
row1 2 5 12
以下是限制条件:
- 仅比较存在的行(即:由于file1.txt中存在行3,但file2.txt中不存在行3,因此不需要进行比较)
- 一次只能比较一行和一列
- 必须使用
awk
- 文件中的行可能不符合顺序
awk 'NR>2
for (i=2;i<NR;i++) #for each row of file1.txt
{
for(j=1;i<NF;j++) #for each column of file1.txt
{
// check if row and column of file1.txt is equal to row and column of file2.txt
}
}
' file1.txt file2.txt
FNR < 3 { next } # if file record number < 3, go to next record
awk'NR>2
对于(i=2;i显然这是一个家庭作业问题,所以我将给你一些提示。你必须有一本awk书来阅读,在那里你可以学习细节
您尝试使用NR的方式不正确。它不是记录的总数,而是当前记录的数目
请记住,awk脚本是一个规则列表,每个规则的形式为pattern{actions}
。因此,您的程序应该尽可能采用这种形式。awk的基本机制是读取一条记录,然后根据每个规则的模式依次测试它,如果它与某个模式匹配,则执行相关操作,当它到达规则末尾时,继续执行下一条记录。它是“数据驱动的”,这与C或Java等语言非常不同
您可以使用如下初始规则跳过两个文件的前两行:
awk 'NR>2
for (i=2;i<NR;i++) #for each row of file1.txt
{
for(j=1;i<NF;j++) #for each column of file1.txt
{
// check if row and column of file1.txt is equal to row and column of file2.txt
}
}
' file1.txt file2.txt
FNR < 3 { next } # if file record number < 3, go to next record
在处理第一个文件时,您需要使用关联数组来保存由第一个字段键入的记录
最后一条规则将只处理第二个文件,测试第一个字段是否是关联数组中的键,如果是,则比较其他字段以查看它们是否匹配
因此,您的程序可能具有以下结构:
FNR < 3 { next } # if file record number < 3, go to next record
NR == FNR {
# Only the first file's records will be processed here
# Save info in an associative array.
aa[$1] = ...
next # go on to the next record
}
# If a rule has no pattern, it matches every record
{
# Only the second file's records will be processed here
if ($1 in aa) {
# compare fields
}
}
FNR<3{next}#如果文件记录编号<3,则转到下一个记录
NR==FNR{
#这里只处理第一个文件的记录
#将信息保存在关联数组中。
aa[$1]=。。。
下一张#继续下一张唱片
}
#如果规则没有模式,它将匹配每个记录
{
#这里只处理第二个文件的记录
如果(aa为1美元){
#比较字段
}
}
当然有很多限制条件……我会将此作为学术环境中的某种练习。你能展示你的预期输出吗?不,我没有。我只是不知道OP试图从这个问题中获得的确切输出是什么。