在我执行编写一些代码的任务之前,我希望有人可以确认以下是可能的(或至少相当简单)。
我想读取一个包含 9 列(由单个空格分隔)和多行数字的文件。第二列按数字排序,从大到小。我想丢弃第二列中包含低于指定数字的所有行,然后生成一个新文件并仅输出符合此规则的顶部行。
此外,我想添加第 10 列,它是其他 2 列之间的计算结果。
这是使用数组完成的吗?
提前谢谢了。
这在 awk 中是微不足道的。假设$N
是一个 shell 变量,其中包含您想要的第二列的最小值,并且您想让第 10 列成为第 3 列和第 5 列的总和:
awk '$2 > '$N'{ $10 = $3 + $5 }1' input-file
这将输出所有行。管道输出到 head 以减少输出的行数,或者在 awk 脚本中添加一个计数器。如果您编写 C 代码来执行此操作,那么您就是在浪费时间,除非这是帮助学习 C 的练习。
另一方面,它在 C 中非常简单。为简单起见,假设您只有 2 列:
int c[2];
do {
rc = scanf( "%d %d", c, c + 1 );
if( c[1] > N && rc == 2 )
printf( "%d %d %d", c[0], c[1], c[0] + c[1] );
} while( rc > 0 );
最严格的方法可能是将文件中的每一列转换为一个数组,然后按照您从那里的描述对其进行操作。
请记住,该文件存储字符而不是整数,请确保根据您想要存储的内容分配数组。
您可能还会发现讨论将字符转换为整数的这个问题很有用。