-1

我有一个来自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

这是什么意思?

4

2 回答 2

3

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

尝试发布的输出

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

头部将采用前两行输入 od 将打印每个字符(如果不打印,则打印其代码)

如果您发现问题,您可以使用 sed 或 awk 删除有问题的字符

编辑

你有 cr nl 作为行尾(即 dos 行尾),你需要用 dos2unix 之类的东西来剥离它们,或者你可以在 awk 中做类似的事情

awk '{sub(/\r$/,"");print $2,$1}'
于 2013-06-14T07:57:36.500 回答
0

我无法重现这个:

$ cat in.txt 
1 2
2 3
4 5
$ awk '{print $1,$2}' <in.txt
1 2
2 3
4 5
于 2013-06-14T08:00:28.307 回答