在awk中使用print时格式错误

时间:2013-06-14 07:55:53

标签: awk

我有一个来自http://snap.stanford.edu/data/cit-HepPh.html的2列文件。我下载的文件是 cit-HepPh.txt.gz 。我删除所有不是数字的字符(文件的前4行),然后我用一个简单的空格更改数字之间的标签空间:

awk '{print $1,$2}' Cit-HepPh.txt > 1

然后我试图反转文件中的元素并将它们写入另一个文件中。我用了

awk '{print $2,$1}' 1 > 2

但我获得的是

2
 1
3 
 2
5
 4
...

而不是像

这样的东西
2 1
3 2
5 4
...

为什么?


我做了

head -2 Cit-HepPh.txt | od -a

我有回报

0000000   9   9   0   7   2   3   3  ht   9   3   0   1   2   5   3  cr
0000020  nl   9   9   0   7   2   3   3  ht   9   5   0   4   3   0   4
0000040  cr  nl
0000042
这意味着什么?

2 个答案:

答案 0 :(得分:3)

听起来文件中还有其他(非打印)字符

尝试发布

的输出
head -2 Cit-HepPh.txt | od -a

头部将采取前两行输入od将打印每个字符(或其代码,如果它是非打印)

如果您发现问题,可以使用sed或awk

删除有问题的字符

修改

你有一个行结束(即dos行结尾)你需要用dos2unix之类的东西去除它们,或者你可以用类似

的awk来做
awk '{sub(/\r$/,"");print $2,$1}'

答案 1 :(得分:0)

我无法重现这个:

$ cat in.txt 
1 2
2 3
4 5
$ awk '{print $1,$2}' <in.txt
1 2
2 3
4 5