簡體   English   中英

如何在Mac的awk中做簡單的concat

[英]how to do simple concat in awk in mac

所以我有一個與此類似的文件list.txt:

                              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不起作用?

它不起作用,因為您的輸入文件是在Windows上創建的,因此在每一行的末尾都有虛假的Control-M,這搞亂了顯示的輸出。 在文件上運行dos2unix或以其他方式擺脫那些control-M,您的腳本將按編寫的方式運行,但更好的方法是:

awk '{print "SET",$1,0}' list.txt

使用awk,其:

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

只是:

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

試試這個awk單線:

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

輸出:

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

這與內聯開關-i工作:

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

-i.bak將確保使用以.bak擴展名創建的備份將更改保存到文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM