2017-04-26 25 views
0

我懷疑我會解決這個問題的很長的路要走,但請原諒我是新來猛砸,grep和awk的...擊:grep的行號對應於AWK NR

我的問題的總結grep中的行號不對應於文件中的實際行號。從我收集的空行中刪除行號。我不想遍歷文件中的每一行以確保100%的覆蓋率。

我所試圖做的是從一個文件搶行的段並用grep和awk

  1. grep的調用得到行號的列表,因爲可能有多個實例對其進行處理的在文件中的「開始位置」:

    startLnPOSs=($(cat "$c"| grep -e '^[^#]' | grep --label=root -e '^[[:space:]]start-pattern' -n -T | awk '{print $1}'

  2. 然後,使用AWK我從起始點迭代,直到遇到一個「結束」令牌。

    declarations=($(cat "$c" | awk "$startLnPos;/end-pattern/{exit}"))

+0

'grep'不會忽略其編號中的空白行。 – Barmar

+0

你可以在awk中完成所有的事情。另外查看如何在awk中使用shell變量。 – 123

+0

你爲什麼使用'grep'來查找起始行號?你可以在'awk'中匹配相同的模式。 – Barmar

回答

1

對我來說,這看起來有點像一個XY問題,因爲你向我們展示你在做什麼來解決問題,但實際上並不概述的問題。

所以在猜測我想你想要返回開始/結束模式之間的所有項目到你的數組(這也可能是錯誤的,但我們不知道整體圖片)。

所以,你可以做的是:

declarations=($(awk '/start-pattern/,/end-pattern/' "$c")) 

或用SED(完全一樣):

declarations=($(sed -n '/start-pattern/,/end-pattern/p' "$c")) 

根據是否要包括那些實際的線或沒有命令可能需要改變了一點。

這是你想要做的事?

+0

這正是我正在尋找的..謝謝。 – kgjac