首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个bash语句组合成一个

将两个bash语句组合成一个
EN

Stack Overflow用户
提问于 2017-11-27 12:23:05
回答 5查看 75关注 0票数 2

我有许多文本文件,其中在有用信息的左边有一个垃圾块。这个块的宽度不断变化,因此我使用awk计算有用信息的起始列,然后用

代码语言:javascript
复制
idx=$(awk '/START/{print index($0,"START")}' in.txt)
idx=$(($idx-3))
colrm 1 $idx < in.txt > out.txt

如何将两个连续的idx作业合并成一个?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-11-27 12:32:30

试试这个:

代码语言:javascript
复制
idx=$(( $(awk '/START/{print index($0,"START")}' in.txt) - 3 ))

或者:

代码语言:javascript
复制
idx=$(awk '/START/{print index($0,"START")}' in.txt); idx=$(($idx-3))
票数 2
EN

Stack Overflow用户

发布于 2017-11-27 12:32:39

你可以试试:

代码语言:javascript
复制
idx=$(( $(awk '/START/{print index($0,"START")}' in.txt) - 3 ))
票数 2
EN

Stack Overflow用户

发布于 2017-11-27 12:31:43

理想的方法是在处理完所有行后使用END子句在Awk中执行操作,如下所示。另外,用三元操作符来检查数字是否为零也很方便。

代码语言:javascript
复制
idx_3=$(awk '/START/{pos=index($0,"START")}END{print pos?(pos-3):0}' in.txt)

您也可以修改三元操作符以检查pos>=3,这取决于您的方便程度。

另外,在Awk中使用match()函数并使用RSTART标记记录开始也是一种更理想的方法。

代码语言:javascript
复制
idx_3=$(awk 'match($0, /START/){pos=RSTART; next}END{print pos?(pos-3):0}' in.txt)

Awk中的特殊内置变量

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47510929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档