2013-08-21 38 views
1

我有下面的句子中的awkawk這句話是什麼意思?

$ gawk '$2 == "-" { print $1 }' file 

我想知道什麼事該指令準確地做,因爲我不能解析正是我需要的話。

編輯:如何才能跳過以下astersiks之前的行? 比方說,我有以下行:

text 
text 
text     


      * * * * * * * 

line1 - 
line2 - 

然後我想,只過濾

line1 
line2 

與我上面貼了一句......

$ gawk '$2 == "-" { print $1 }' file 

感謝您的時間和迴應!

+0

該腳本真的不能再清楚不過以上基礎,所以如果你不明白,做什麼,你絕對不應該試圖在awk中自己寫任何東西。獲得書「有效的Awk編程」第三版作者:Arnold Robbins,閱讀第一章或第二章,並通過幾個例子來學習,你將不會理解該腳本。 –

+1

謝謝@Ed Morton我剛剛下載了這本書。我只是想知道這一點,因爲我必須弄清楚它是否很匆忙上學。乾杯! –

回答

1

回答原來的問題:

如果從文件中的行第二列中的字符串匹配「 - 」,那麼它首席在行的第一列中,列默認由空格分隔。

這將匹配並打印出one

one - two three 

這不會:

one two three four 

回答修訂的問題:

此代碼應該做的事情,你需要之後給定字符串的匹配:

awk '/\* \* \* \* \* \* \*/{i++}i && $2 == "-" { print $1 }' data2.txt 

測試上this data給出了下面的輸出:

2two 
2two 
+0

謝謝@Olafur Osvaldsson。我會嘗試併發布發生的事情。 –

+0

我跑了@Olafur Osvaldsson這一行,雖然我沒有在提示中得到任何退出。它只是顯示爲一個有效的命令,但沒有顯示任何內容......任何想法爲什麼?提前致謝! –

+0

不是沒有看到你正在測試的數據,它與我從你的問題中的信息組成的虛擬數據一起工作。 – Oli

3

這將找到第二列(以空格分隔)是 - 的所有行,然後將打印第一列。

第一部分($ 2 ==「 - 」)檢查第二列是 - ,然後如果是這樣的話,運行附加的{}塊,它打印第一列($ 0是整行,以及$ 1,$ 2等是第一,第二,...列)

空格是這裏的分隔符,因爲它們是awk中的默認分隔符。

編輯:你想現在要做的,試試下面的什麼(不是最優雅的,但它應該工作。)

gawk 'BEGIN { p = 0 } { if (p != 0 && $2 == "-") { print $1 } else { p = ($0 == "* * * * * * *")? 1 : 0 } }' 

分佈在多個線的清晰度上發生的事情:

gawk 'BEGIN { p = 0 } 
      { if (p != 0 && $2 == "-") 
       { print $1 } 
       else 
       { p = ($0 == "* * * * * * *")? 1 : 0 } 
      }' 
+0

感謝您的回覆@qaphla。我會用我的代碼嘗試一些東西,然後 –

+0

如果你想要做一些特定的事情,你可以直接詢問一下,並在這裏得到幫助。 – qaphla

+0

謝謝@qaphla。我編輯了我的帖子。 –