我无法确定当前行号是否大于下一行,那么它应该打印例如“数字 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
我无法确定当前行号是否大于下一行,那么它应该打印例如“数字 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
这将是你想要的:
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
您可以调整文本(“大于/小于”)。==如果您愿意,也可以处理此案。
只是为了好玩,这里有一种使用 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