簡體   English   中英

將兩個bash語句合並為一個

[英]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 ))

理想的方法是使用AwkEND子句在處理所有行結束執行操作,如下所示。 同樣,使用三元運算符來檢查數字是否為零也很方便。

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)

Awk中的特殊內置變量

真正執行所需操作的方法是只測試一次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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM