2017-09-22 82 views
0

IM需要幫助的下一行: 我有一個這樣具有輸出文件:BASH自動完成空白,直到與價值

001 value 
    value 
045 value 
    value 
    value 
068 value  
098 value 
    value 

我需要一個命令來獲得類似這樣的輸出:

001 value 
001 value 
045 value 
045 value 
045 value 
068 value 
098 value 
098 value 
+0

問題中的格式不正確。他們是分開的線......如: 「001值」 「值」 – Deeshey

+0

對不起,即時通訊與本網站新,我不知道如何格式化線。我認爲現在是好的。謝謝。 – Deeshey

回答

1

很容易的與awk

awk '/^[0-9]/{prefix=$1;$1=""}{sub(/^ +/,"");print prefix,$0}' test.in 

這適用於任何前綴從一個數字開始。


原始bash字符串操作。比sed更容易理解,但硬編碼有3個字符,不一定是數字,前綴。

while IFS= read -r line; do 
    if [[ "${line:0:3}" != " " ]]; then 
     prefix="${line:0:3}" 
    fi 
    printf '%s%s\n' "$prefix" "${line:3}" 
done < test.in 

這也可以用做sed,雖然它比一般的sed命令稍微更復雜。它假設3位數的前綴。
-E適用於BSD sed;如果您使用的是GNU sed,則應將其替換爲-r

sed -E '/^[0-9]{3} /{h 
s/(...).*/\1/ 
x 
n 
} 
G 
s/...(.*)\n(.*)/\2\1/ 
' file.txt