【发布时间】:2014-08-20 23:58:00
【问题描述】:
我有两个文本文件,我想根据它们的行和列比较它们的对应值。文本文件中的每个值(字段)都由制表符分隔。
这里是文件:
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
row3 3 9
这是我目前的代码:
awk '
FNR < 2 {next}
FNR == NR {
for (i = 2; i <= NF; i++) {
a[i,$1] = $i;
}
next;
}
# only compare if a row in file2 exists in file1
($1 in b) {
for (i = 2; i <= NF; i++)
{
if (a[i,$1] == $i)
{
print "EQUAL"
}
else if ( //condition that checks if value is null// )
{
print "NULL"
}
else
{
print "NOT EQUAL"
}
}
}' file1.txt file2.txt
我在检查file2.txt 中是否存在空值(file2.txt 中的row3 和col2)时遇到了困难。我什至没有得到那个空值的输出。到目前为止,我尝试了if ($i == ""),但它仍然没有给我任何输出。有什么建议?谢谢。 (我在 bash 脚本中使用 gnu awk)
如果需要进一步解释,请告诉我。
【问题讨论】:
-
@EdMorton 我已经提到每个文本文件中的值(或字段)由问题中的制表符分隔!它在问题的第一段。
-
所以你做了,我没有注意到,我只是看到你的脚本没有使用制表符作为分隔符。
-
@EdMorton
awk不会自动检查制表吗? -
如果你的意思是 awk 默认使用制表符作为字段分隔符 - 不,它使用任何连续的空白字符序列。
标签: linux bash awk scripting suse