2016-04-19 26 views
0

這有可能嗎?我現在有一個單線程來計算文件中的單詞數量。如果我什麼輸出我現在有它看起來像這樣:如何獲得沒有AWK,sed或循環的列中每個單詞的長度?

3 abcdef 
3 abcd 
3 fec 
2 abc 

這一切在1號線完成,無需環路和我在想,如果我能在一列每個單詞的長度增加一列。我想我可以使用wc -m來計算字符,但我不知道如果沒有循環,我可以做到這一點?

正如在標題中看到的,沒有AWK,sed,perl ..只是很好的老bash。

我想要什麼:

3 abcdef 6 
3 abcd 4 
3 fec 3 
2 abc 3 

當最後一列是每個單詞的長度。

+0

想'expr長度WORD'因爲只使用shell內建而不會調用'wc'? – rpy

+0

不'wc -m'也算'\ n'? – redxef

回答

3
while read -r num word; do 
    printf '%s %s %s\n' "$num" "$word" "${#word}" 
done < file 
+0

我喜歡這個解決方案比我的更好。它更優雅。 – zedfoxus

+0

@zedfoxus: - ) –

+2

雖然'awk'{print $ 1,$ 2,length($ 2)} file''會運行得更快。 –

3

你可以做這樣的事情也:

文件

> cat test.txt 

3 abcdef 
3 abcd 
3 fec 
2 abc 

bash腳本

> cat test.txt.sh 

#!/bin/bash 

while read line; do 
    items=($line) # split the line 
    strlen=${#items[1]} # get the 2nd item's length 
    echo $line $strlen # print the line and the length 
done < test.txt 

結果

> bash test.txt.sh 

3 abcdef 6 
3 abcd 4 
3 fec 3 
2 abc 3 
相關問題