1

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

4

6 回答 6

3

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

awk '{print "SET",$1,0}' list.txt
于 2013-08-23T21:28:04.060 回答
2

使用 awk,它的:

awk '{printf "SET %d 0\n", $1}' your.file
于 2013-08-23T21:13:24.790 回答
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
于 2013-08-23T21:13:59.887 回答
2

试试这个 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
于 2013-08-23T21:15:26.067 回答
1
awk '{print "SET", $1, "0"}' file
于 2013-08-23T21:13:18.227 回答
1

这个带有内联开关的 sed-i有效:

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

-i.bak将确保将更改保存到文件中,并使用.bak扩展名创建备份。

于 2013-08-23T21:14:09.217 回答