2012-11-21 43 views
0

當我啓動bash命令我得到這個如何顯示2行1使用grep,awk和更

--> '044' 0  ''        0   
1> ''        0   0 

這是1個寄存器,我得到了更多的寄存器,如何顯示每個寄存器1線?如果可能的話,如何顯示只有一個空格分隔值?

我想這一點:

'044' 0 '' 0 '' 0 0 

那麼我把所有的命令,請使用此功能不:

cdmao;(echo "SELECT nulog FROM POSTE WHERE numan='5512204';"|cuser|grep "\--"|grep -v nulog|cut - c5-11;)|while read poste_id;do echo "SELECT key_id,genrtou,chiftp, sonsurson, mnemo, order_mla, key_mla FROM KEYBOARD WHERE poste_id='$poste_id';"|cuser| tr -s ' ' | 
while read line; do 
    if [[ $i == 1 ]]; then 
    echo -n "$line"; 
    let i+=1; 
    else 
    echo " $line"; 
    let i-=1; 
    fi; 
done 

我沒有收到什麼:僅此>未完成命令

回答

1

我假設的前幾個字符也是輸出的一部分,但解決方案不依賴於它。

要刪除多餘的空格,您可以使用tr -s,這將刪除傳遞的字符的重複。比較沒有改變的tr-ed輸出(在這兩種情況下的第三和第四行):

[email protected] gemrb 0 $ echo "--> '044' 0  ''        0   
> 1> ''        0   0" 
--> '044' 0  ''        0   
1> ''        0   0 
[email protected] gemrb 0 $ echo "--> '044' 0  ''        0   
1> ''        0   0" | tr -s ' ' 
--> '044' 0 '' 0 
1> '' 0 0 

所以唯一剩下的就是刪除該換行符。你也可以用tr-d刪除)做到這一點,但是你也可以刪除將字符串從下一個寄存器中分離出來的換行符。

我不知道這些寄存器轉儲如何穩定的,所以這裏不涉及正則表達式的解決方案 - 它只是打印僅包括每秒符合換行符行:

i=1 
echo "--> '044' 0  ''        0   
1> ''        0   0" | tr -s ' ' | 
while read line; do 
    if [[ $i == 1 ]]; then 
    echo -n "$line"; 
    let i+=1; 
    else 
    echo " $line"; 
    let i-=1; 
    fi; 
done 
--> '044' 0 '' 0 1> '' 0 0 

要使用它,只需用您的註冊程序轉儲程序替換echo 'long register dump'字符串即可。

編輯:好的,如果這是你的整個命令鏈,那麼你必須將它們或它們的輸出的部分分組不會被過濾器捕獲。但我猜cdmao只是用於一些初始化(如果不是,則在另一個子shell或大括號中添加所有內容)?

主要問題是你沒有完成while循環(done缺少某處)。不知道如果我把它放在正確的,但試試這個:

cdmao; 
(echo "SELECT nulog FROM POSTE WHERE numan='5512204';"|cuser|grep "\--"|grep -v nulog|cut - c5-11;) | 
while read poste_id; do 
    echo "SELECT key_id,genrtou,chiftp, sonsurson, mnemo, order_mla, key_mla FROM KEYBOARD WHERE poste_id='$poste_id';"; 
done |cuser| tr -s ' ' | 
while read line; do 
    if [[ $i == 1 ]]; then 
    echo -n "$line"; 
    let i+=1; 
    else 
    echo " $line"; 
    let i-=1; 
    fi; 
done 

它可以在漂亮的方式來完成,但我不知道所涉及的一些命令,所以我一直是靠近你的版本。無論如何,使用一些格式和語法錯誤將更容易發現。使用這種

+0

我把所有的命令,因爲我不知道如何把你的命令與我的 – kaseOga

0

這應該刪除輸出中的所有多餘空格和換行符:

your_command_here | tr '\n' ' ' | sed "s/[ ]*/ /g" 

如果從你的命令的輸出部分寫入stderr除了標準輸出,做到:

your_command_here 2>&1 | tr '\n' ' ' | sed "s/[ ]*/ /g" 
+0

我得到這個: - - >'0 4 4 0 0 1> '' 0 0 – kaseOga

+0

@kaseOga看到更新的答案=) –

+0

不起作用,顯示1相同linea,但所有1 linea,請參閱lynx的答案,1註冊2行,但我收到超過50個寄存器,ü刪除所有\ n,所有寄存器在1行 – kaseOga

0
your command | cut -d '>' -f 2- | paste - - | awk '{$1=$1;print}'