【发布时间】:2021-02-18 05:22:43
【问题描述】:
我有 2 个文件
cat file1.txt
lspol > 8296
....
cat file2.txt
lspol 8297
...
如果 file2.txt 中第 1 列的数字大于 file1.txt 中第 1 列的数字,我正在尝试获取输出
下面的命令很好用
# if column 1 of file1.txt is equal to column 1 of file2.txt and column 3 of file1.txt is greater than column 2 in file2.txt
awk '
{
getline buf <f2;
split( buf, a, " " );
if( $1 == a[1] && $3+0 > a[2]+0 )
printf( "%s\n", buf );
}
' f2="file2.txt" file1.txt
我试图从 file1.txt 的第二列中提取运算符,但没有运气。我尝试了很多方法,这里是其中之一
awk '
{
getline buf <f2;
split( buf, a, " " );
if( $1 == a[1] && $3+0 $2 a[2]+0 )
printf( "%s\n", buf );
}
' f2="file2.txt" file1.txt
【问题讨论】:
-
这是一个不愉快的混合代码和数据的尝试。你可以全力以赴,让 shell 从你从数据中挑选出来的字符串编写一个 Awk 脚本,或者做安全但乏味的事情,将每个操作数字符串映射到一个函数,比如
if((oper=="<") && (a < b)) ... else if ((oper==">") && (a > b)) ...