在我执行编写代码的任务之前,我希望有人可以确认以下内容是可行的(或者至少相当简单)。
我想要读取包含9列(由单个空格分隔)和许多行的数字的文件。第二列按数字顺序排列,从最大到小。我想丢弃第二列中包含指定数字以下的所有行,然后生成一个新文件并输出符合此规则的顶行。
此外,我想添加第10列,这是在其他2列之间进行计算的结果。
这是使用数组完成的吗?
非常感谢提前。
答案 0 :(得分: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 );
答案 1 :(得分:0)
最直接的方法可能是将文件中的每一列转换为数组,然后按照您的描述进行操作。
请注意,文件存储字符而非整数,请确保根据您希望存储的内容分配数组。
您也可以找到这个问题,讨论conversion of characters to integers有用的问题。