1

我无法确定当前行号是否大于下一行,那么它应该打印例如“数字 53 大于 23”,然后比较接下来的两行“数字 54 小于 76 ”。我在想一些类似 NR%2 的东西,但不知道在那之后该怎么做。任何有关如何完成此操作的提示或建议将不胜感激。

该文件的一个示例是:

53
23
54
76
12
42

预期结果

the number 53 is greater than 23
the number 54 is less than 76
the number 12 is less than 42
4

2 回答 2

3

这将是你想要的:

 awk '!(NR%2){print p>=$0?p">="$0:p"<"$0;next}{p=$0}' file

输出:

53>=23
54<76
12<42

使用的输入文件输出:

53>=23
54<76
12<42
43>=4
1<63
34<56

您可以调整文本(“大于/小于”)。==如果您愿意,也可以处理此案。

于 2013-05-16T09:54:30.927 回答
0

只是为了好玩,这里有一种使用 coreutils、bc 和 sed 的方法:

<infile paste -d' ' - - <( <infile paste -d'<' - - | bc ) | 
sed 's/1$/less/; s/0$/greater/; s/([0-9]+) ([0-9]+) (.*)/the number \1 is \3 than \2/'

输出:

the number 53 is greater than 23
the number 54 is less than 76
the number 12 is less than 42

解释

到 bc的内部粘贴管道n1<n2返回一个二进制向量。外部粘贴用输入中的数字对将此向量列成列。sed 根据二进制向量重新组织其输入。

因此,如果您只想知道成对的线是大于还是小于彼此,那么这一点就足够了:

<infile paste -d'<' - - | bc

输出:

0
1
1
于 2013-05-16T11:02:29.673 回答