2015-12-19 61 views
0

我想從.txt文件中剪下若干數字以便稍後添加它們。下面是來自.txt文件摘要:字符串的切割號

anonuser pts/25  127.0.0.1 Mon Nov 16 17:24 - crash (10+23:07) 

我想要的「+」之前得到的「10」,我只想數量,沒有別的。這個數字應該寫入另一個.txt文件。我用這個代碼,但它僅適用,如果號碼有一個數字:

awk ' /^'anonuser'/{split($NF,k,"[(+0:)][0-9][0-9]");print k[1]} ' log2.txt > log3.txt 
+1

使用awk:'AWK -F [\(+] '{打印$ 2}' 文件> new_file' – Cyrus

+0

你爲什麼跳出來,然後回AWK周圍'anonuser' @Cyrus單引號? - 你的評論是正確的解決方案,所以爲什麼不把它作爲答案(在調整後得到正確的語法:'awk -F'[(+]'{print $ 2}'文​​件)? –

回答

4

隨着GNU的grep:

grep -Po '\(\K[^+]*' file > new_file 

輸出到NEW_FILE:

​​

參見: PCRE Regex Spotlight: \K

+0

'\ d'可能比'[^ +]'更有意義,因爲OP需要一個數字 – Aaron

+0

@Aaron:謝謝你的提示 – Cyrus

+0

另外,如果OP計劃收集這些數字並在稍後添加它們,'>>'可能會使更多感覺比'>'。 –

0

如果使用t他match()功能在awk

$ awk '/^anonuser/ && match($NF,/^\(([0-9]*)/,a) {print a[1]}' file 
10 

這是如何工作的?

  • /^anonuser/ && match() {print a[1]}如果符合anonuser啓動和模式被發現,打印出來。
  • match($NF,/^\(([0-9]*)/,a)在最後一個字段((10+23:07))中,查找字符串( +數字並將其捕獲到數組a[]中。

還要注意,這種方法允許您存儲您捕捉的值,以便您可以按照您在問題中指出的那樣對它們進行求和。

0

以下使用與OP相同的方法,並具有一些優點,例如,它不需要任何特殊,它是相當穩健(相對於對輸入假設)和可維護性:

awk '/^anonuser/ {split($NF,k,/+/); gsub(/[^0-9]/,"",k[1]); print k[1]}' 
0

任何東西更復雜的使用awk但對於簡單的任務sed是很容易

sed -r '/^anonuser/{s/.*\(([0-9]+)\+.*/\1/}' 

找到(+之間的數字符號。

0

我不確定文件中的格式。
你可以使用簡單的剪切命令嗎?

cut -d"(" -f2 log2.txt| cut -d"+" -f1 > log3.txt