在awk中非常奇怪的行为

时间:2015-03-16 12:59:52

标签: linux bash shell awk

我在awk中遇到了非常奇怪的行为。

输入文件如下:

               ABCD                                        Yes
               EFGH                                        Yes

我的awk脚本如下:

/^              / {
        print "ss", $2, "dd\n"
}

我期待的是:

ss Yes dd

ss Yes dd

但令人惊讶的是,结果如下:

 ddYes

 ddYes

我的" ss"以及如何附加在" dd"?

的背面

2 个答案:

答案 0 :(得分:3)

输入文件有DOS换行符。每行末尾的\r字符作为$2的一部分输出,并将插入点重置为行的开头,此时,和{{1}的空格然后打印出来覆盖初始dd。 (您可以修改ss前缀或ss后缀长度,以便更清楚地看到这一点。)

从原始文件中删除它们,这将消失。

答案 1 :(得分:-1)

awk '{print "ss", $2, "dd\n"}' f2

f2是输入文件,它对我来说很好