2013-08-23 39 views
1

所以我有LIST.TXT相似文件到這一個:如何做簡單CONCAT在AWK在Mac

       186 
           423 
           423 
           234 
           634 
           437 

而且我想類似這樣的輸出:

SET 186 0 
SET 423 0 
SET 423 0 
SET 234 0 
SET 634 0 
SET 437 0 

我試着與此:

sed 's/^ *//g' list.txt | awk '{a="SET ";b=" 0";print a,$0,b}' 

但它打印

0 186 
    0 423 
    0 423 
    0 234 
    0 634 
    0 437 

鑑於

sed 's/^ *//g' list.txt | awk '{a="SET ";b=" 0";print a,$0}' 

運行完美:

SET 186 
SET 423 
SET 423 
SET 234 
SET 634 
SET 437 

所以我不知道我做錯了。

你知道如何解決這個問題,爲什麼print a,$0,b不起作用?

回答

2

使用awk,它的:

awk '{printf "SET %d 0\n", $1}' your.file 
+0

'printf'不打印一個換行符,你有將其添加到格式字符串。 – tripleee

+1

@tripleee Aehmmm ..你有沒有讀過我的一班? ;) – hek2mgl

2

簡單:

$ awk '{print "SET",$1,0}' file 
SET 186 0 
SET 423 0 
SET 423 0 
SET 234 0 
SET 634 0 
SET 437 0 
1

這與內聯開關的sed -i作品:

sed -i.bak 's/\([0-9]*\)/SET \1 0/' file 

-i.bak將確保保存更改進入t他用.bak擴展名創建備份文件。

2

試試這個AWK一行代碼:

awk '$0="SET "$1" 0"' file 

outpus:

SET 186 0 
SET 423 0 
SET 423 0 
SET 234 0 
SET 634 0 
SET 437 0 
+0

你想閱讀你的腳本或http://stackoverflow.com/a/18411951/171318?我更喜歡後者 – hek2mgl

3

它不工作,因爲你的輸入文件創建於Windows等都具有僞控制女士末每條線都是這樣,這就搞亂了顯示的輸出。對該文件運行dos2unix或以其他方式擺脫那些控制女士和寫腳本的工作,但更好的方法來做到這將是簡單的:

awk '{print "SET",$1,0}' list.txt 
相關問題