2011-10-30 54 views
0

文件格式我是新來這些AWK和貝殼的東西,結果被套牢了簡單而合乎邏輯的問題..一個簡單而合乎邏輯的問題用AWK

輸入文件:

6000 9876 5675 .... 
8576 8765 9845 ... 
.... 

輸出文件:(必填)

60 00 98 76 56 75 .... 
85 76 87 65 98 45 ... 
.... 

轉換輸出到輸入的是一個相當容易的任務

awk '{printf("%s%s %s%s %s%s %s%s", $1, $2, $3, $4, $5, $6, $7, $8)}' output_file 
                  > input_file 

但轉換輸入到輸出,我沒有得到任何的猜測

(也沒有。的領域是不知道的,雖然我認爲一些邏輯與NF可以解決這個問題),但主要問題是即使我不知道。 fileds然後如何繼續?

最小。要閱讀的單位將像$1,$2等。我需要打破他們,需要在他們之間插入一個空間。

我不知道很多關於regex,但我想對it.May的手有些操作與sedregex可以幫助我。

請提供您的寶貴suggestons.`

+0

對不起,我的'是拼寫錯誤的標題.Thanx formatting'爲編輯... –

回答

1
tr -d ' ' < inputFile | sed 's/../& /g' 

或者避免第一TR:

sed -e 's/ //g' -e 's/../& /g' 
+0

你能解釋一下'&'是做exactly.As我剛纔提到什麼因爲好奇心,我對這些事情很陌生。 –

+0

'&'表示這裏要替換的兩個字符,即sed命令告訴用自己後面的空格字符替換兩個字符的每個序列。第一個tr命令從初始文件中刪除任何空間以簡化sed處理。 – jlliagre

+0

thanx我知道了.... –

2

這裏有一個SED例子:因爲這個問題標題中提到

$ echo "1234 5678 9012"|sed -e 's/\([0-9][0-9]\)\([0-9][0-9]\)/\1 \2/g' 
12 34 56 78 90 12 
+0

正如您已經知道輸入只包含數字和空格,可能是'<<<「1234 5678 9012「sed -r's /(..)(..)(\ s)?/ \ 1 \ 2 \ 3/g''可能就足夠了。 – potong

0

「 awk「,我給了一個awk解決方案,雖然已經接受了答案:

這需要GAWK:

kent$ echo "6000 9876 5675 
8576 8765 9845"|awk '{for(i=1;i<=NF;i++)$i=gensub(/^([0-9]{2})([0-9]{2})$/,"\\1 \\2","g",$i);print }'          
60 00 98 76 56 75 
85 76 87 65 98 45