0

在我执行编写一些代码的任务之前,我希望有人可以确认以下是可能的(或至少相当简单)。

我想读取一个包含 9 列(由单个空格分隔)和多行数字的文件。第二列按数字排序,从大到小。我想丢弃第二列中包含低于指定数字的所有行,然后生成一个新文件并仅输出符合此规则的顶部行。

此外,我想添加第 10 列,它是其他 2 列之间的计算结果。

这是使用数组完成的吗?

提前谢谢了。

4

2 回答 2

1

这在 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 );
于 2012-08-28T16:00:15.097 回答
0

最严格的方法可能是将文件中的每一列转换为一个数组,然后按照您从那里的描述对其进行操作。

请记住,该文件存储字符而不是整数,请确保根据您想要存储的内容分配数组。

您可能还会发现讨论将字符转换为整数的这个问题很有用。

于 2012-08-28T16:01:04.863 回答