2012-11-16 25 views
1

我有很多行的文件,像把數字的行成一列與shell腳本

1 jfkdajfd 1 2 3 5 
2 fkldfjld 
3 fdkfloaf 9 10 
4 fldfldkf 
5 fdskf;ak 12 1 4 

我想所有的數字,並把它們在一個文件中的列,像

1 
2 
3 
5 
9 
10 
12 
1 
4 

我該如何做到這一點? 感謝

+0

是文件中的行號? –

+0

另請問[在Unix和Linux](http://unix.stackexchange.com/q/55910/4667) –

回答

2

在你的情況下,它看起來像你可以這樣做:

awk '{for (i=3;i<=NF;++i) {print $i}}' 

這是假設你要打印的數字出現在第3欄或之後。

+1

否則,你可以做'awk'{for(i = 3; i <= NF; ++ i)if ($ i〜/ [0-9] + /){print $ i}}'' – axiom

+1

@axiom/[0-9] + /會匹配「foo3bar」等。您需要將其前後錨定爲/^[0-9] + $ /。 –

+0

是的。非常感謝您指出這一點。它應該是: 'awk'{for(i = 3; i <= NF; ++ i)if($ i〜/^[0-9] + $ /){print $ i}}''' – axiom

0
cat file | while read line 
do 
    for i in $(echo ${line}) 
    do 
    isnumeric=$(echo ${i} | grep -q [0-9]; echo ${?}) 
    if [ ${isnumeric} -eq 0 ] 
    then 
     echo ${i} >> outfile 
    fi 
    done 
done 

沒有防彈性,也沒有先前給出的解決方案那麼優雅,但它顯示了什麼是用來確定這是一個數字還是不是。

0
while read num alpha rest; do 
    [[ "$rest" ]] && printf "%s\n" $rest # <-- variable is unquoted 
done < filename