bash - 从第一行使用变量时向后读取文件
问题描述
我想在使用第一行中存在的变量时向后读取文件(此处:2636)。
我的文件:
nx_ 2355 ny_ 2636
0.000000 0.000000 0.000000
1.000000 68.000000 0.428139
2.000000 68.000000 0.939878
3.000000 67.000000 0.757181
4.000000 68.000000 0.000000
5.000000 69.000000 -1.229728
为了向前读取文件并处理它,我使用了:
cat $1 | awk 'NR==1 {nb=$4} NR>1 {up=nb-$1; print $2,up,$3}'
要向后读取文件,我似乎应该使用 tac,但我不知道如何在第一行检索变量,并避免处理最后一行。我正在寻找这样的东西:
tac $1 | awk 'NR==END {nb=$4} NR<END {up=nb-$1; print $2,up,$3}'
我想要作为输出:
69.000000 2631 -1.229728
68.000000 2632 0.000000
67.000000 2633 0.757181
68.000000 2634 0.939878
68.000000 2635 0.428139
0.000000 2636 0.000000
解决方案
这是你想要做的吗?
$ awk 'NR==1{nb=$4; next} {print $2, nb-$1, $3}' file | tac
69.000000 2631 -1.229728
68.000000 2632 0.000000
67.000000 2633 0.757181
68.000000 2634 0.939878
68.000000 2635 0.428139
0.000000 2636 0.000000
如果你真的必须做你说你想做的事,那就是这样:
$ read -r _ _ _ nb < file; tail +2 file | tac | awk -v nb="$nb" '{print $2, nb-$1, $3}'
69.000000 2631 -1.229728
68.000000 2632 0.000000
67.000000 2633 0.757181
68.000000 2634 0.939878
68.000000 2635 0.428139
0.000000 2636 0.000000
或这个:
$ read -r _ _ _ nb < file; tac file | awk -v nb="$nb" 'NR>1{print p[2], nb-p[1], p[3]} {split($0,p)}'
69.000000 2631 -1.229728
68.000000 2632 0.000000
67.000000 2633 0.757181
68.000000 2634 0.939878
68.000000 2635 0.428139
0.000000 2636 0.000000
或类似的,但鉴于您发布的脚本,这似乎不太可能是您真正需要的。
如果以上内容不能回答您的问题,请编辑您的问题以阐明您的要求并根据您发布的示例输入提供预期的输出。
推荐阅读
- qt - Qt-C++ 应用程序中的 PyQt 小部件
- python - SQlite - 为什么我需要提交命令
- python - 如何为 8-Queen 问题的 PMX 函数创建一个只有唯一值的数组?
- qt - Docker 文件中的 Qt 非交互式安装失败并出现 QXcbConnection DISPLAY 错误
- c - 为什么使用输入字符串在屏幕上打印垃圾值?
- c# - 在没有 Array.Sort 或 DataGrid 的情况下对多维数组进行排序?
- r - 如何提取在 R 中具有特定值的子列表的值
- nlp - 处理多语言数据时需要遵循哪些数据准备步骤或技术?
- javascript - 在 React Native 中使用后禁用 Slider
- python - 模拟和副作用替换 - 保持对原始类及其属性的访问