如何在mac中的awk中做简单的concat

时间:2013-08-23 21:11:41

标签: macos shell sed awk

所以我有一个类似于这个的文件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不起作用?

6 个答案:

答案 0 :(得分:3)

它不起作用,因为您的输入文件是在Windows上创建的,因此在每行末尾都有虚假控件-Ms,这会弄乱显示的输出。在文件上运行dos2unix或以其他方式摆脱那些控件-Ms并且您的脚本将按照书面形式工作,但更好的方法是:

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

答案 1 :(得分:2)

用awk,它的:

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

答案 2 :(得分: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

答案 3 :(得分:2)

尝试这个awk one-liner:

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

答案 4 :(得分:1)

awk '{print "SET", $1, "0"}' file

答案 5 :(得分:1)

使用内联开关-i进行此操作:

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

-i.bak将确保使用.bak扩展程序创建的备份将更改保存到文件中。