[英]Combining two bash statements into one
我有許多文本文件,其中有用信息的左側有一塊垃圾。 該塊的寬度不斷變化,因此我使用awk
計算有用信息的起始列,然后使用以下命令刪除左側的列
idx=$(awk '/START/{print index($0,"START")}' in.txt)
idx=$(($idx-3))
colrm 1 $idx < in.txt > out.txt
如何將兩個連續的idx
分配合並為一個?
嘗試這個:
idx=$(( $(awk '/START/{print index($0,"START")}' in.txt) - 3 ))
要么:
idx=$(awk '/START/{print index($0,"START")}' in.txt); idx=$(($idx-3))
你可以試試:
idx=$(( $(awk '/START/{print index($0,"START")}' in.txt) - 3 ))
理想的方法是使用Awk
的END
子句在處理所有行結束后執行操作,如下所示。 同樣,使用三元運算符來檢查數字是否為零也很方便。
idx_3=$(awk '/START/{pos=index($0,"START")}END{print pos?(pos-3):0}' in.txt)
您可以修改三元運算符以也檢查pos>=3
,這取決於您的方便程度。
在Awk
執行此操作的一種更理想的方法是使用其match()
函數並使用RSTART
標記記錄開始
idx_3=$(awk 'match($0, /START/){pos=RSTART; next}END{print pos?(pos-3):0}' in.txt)
真正執行所需操作的方法是只測試一次START,然后保存它的起始位置,然后打印該值減去3:
idx=$(( $(awk 's=index($0,"START"){print s-3; exit}' in.txt) ))
的; exit
增加; exit
以提高效率。
idx=$[$(awk '/START/{print index($0,"START")}' in.txt) - 3]
足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.