Text-Processing
awk 匹配參數上方的所有行
我有一個名為 test.out 的文件,其中包含以下幾行:
-rw-rw---- 1 informix informix 9117025 Jan 21 05:22 shop4_0_Log0000331875.Z -rw-rw---- 1 informix informix 8897981 Jan 21 05:24 shop4_0_Log0000331876.Z -rw-rw---- 1 informix informix 9325351 Jan 21 05:31 shop4_0_Log0000331877.Z -rw-rw---- 1 informix informix 9645109 Jan 21 05:34 shop4_0_Log0000331878.Z -rw-rw---- 1 informix informix 9950581 Jan 21 05:40 shop4_0_Log0000331879.Z -rw-rw---- 1 informix informix 10655940 Jan 21 05:59 shop4_0_Log0000331880.Z -rw-rw---- 1 informix informix 10832325 Jan 21 06:39 shop4_0_Log0000331881.Z -rw-rw---- 1 informix informix 8521443 Jan 21 07:42 shop4_0_Log0000331882.Z -rw-rw---- 1 informix informix 10283566 Jan 21 08:02 shop4_0_Log0000331883.Z -rw-rw---- 1 informix informix 10633957 Jan 21 08:51 shop4_0_Log0000331884.Z
我想列印 grep 值 331881 參數以上的所有行:
我想要的結果必須如下所示:
-rw-rw---- 1 informix informix 9117025 Jan 21 05:22 shop4_0_Log0000331875.Z -rw-rw---- 1 informix informix 8897981 Jan 21 05:24 shop4_0_Log0000331876.Z -rw-rw---- 1 informix informix 9325351 Jan 21 05:31 shop4_0_Log0000331877.Z -rw-rw---- 1 informix informix 9645109 Jan 21 05:34 shop4_0_Log0000331878.Z -rw-rw---- 1 informix informix 9950581 Jan 21 05:40 shop4_0_Log0000331879.Z -rw-rw---- 1 informix informix 10655940 Jan 21 05:59 shop4_0_Log0000331880.Z
使用下面的命令,我可以指定上面要列印的行數:
grep -n 331881 test.out | cut -d':' -f1 | xargs -n1 -I % awk "NR<=%+0 && NR>=%-1" test.out | sed '$d'
在這種情況下,上面的命令將只列印指定數量的行 1 行,但我想將上面的內容更改為列印 grepped 行以上的所有內容。我正在努力尋找解決問題的方法或更簡單的方法。
我認為您可以直接使用 awk :
awk '/331881/ { exit } 1' test.out
這將列印所有行,但對於匹配的行
331881
,退出。
假設您位於包含列出的文件的目錄中,請使用
zsh
:ls -ld shop4_0_Log<331882->.Z
<331882->
是一個特定的zsh
glob,它匹配 331882 或更大的整數。使用其他外殼:
for name in shop4_0_Log*.Z; do number=${name#shop4_0_Log} number=${number%.Z} if [ "$number" -ge 331882 ]; then ls -ld "$name" fi done
在這裡,我們遍歷以 開頭
shop4_0_Log
和結尾的名稱.Z
。對於每個這樣的名稱,我們選擇文件名的整數部分,如果它是 331882 或更多,我們呼叫ls -ld
該名稱。如果前導零導致 shell 將某些數字解釋為八進制(在我的測試中沒有),則
10#$number
在測試中使用強制將數字解釋為十進制整數(這由ksh
andbash
和一些支持其他貝殼)。這兩種變體都不依賴於包含某些
ls
輸出的文本文件的存在。有關的: