为什么awk没有正确地隔开我的田地?

时间:2012-02-21 03:39:42

标签: bash awk

我有一个包含许多字段的文件,我想用awk进行调整。

$ cat file.txt
  133     288K     280K      80K      64K  /system/bin/installd
  121     272K     264K      79K      68K  /system/bin/servicemanager
  698     248K     240K      79K      72K  /system/bin/servicemanager
 1348     248K     240K      79K      72K  /system/bin/servicemanager
  126     244K     236K      65K      56K  /system/bin/debuggerd
$ cat file.txt | awk '{print $NF $1}'
133stem/bin/installd
121stem/bin/servicemanager
698stem/bin/servicemanager
1348tem/bin/servicemanager
126stem/bin/debuggerd

那不是我想要的!我希望数字出现在文本的右边,而不是重叠。知道为什么会这样吗?

5 个答案:

答案 0 :(得分:3)

我怀疑你所看到的是由于回车而导致的,可能是由于Windows / DOS风格的CRLF行分隔符。您可以通过勾选cat -vte file.txt进行验证,并且结果返回将显示为^M。您可以使用tr内嵌过滤这些内容:

cat file.txt | tr -d '\r' | awk '{print $NF $1}'

那应该解决重叠的问题。请注意,awk不会在上面插入输出字段分隔符,除非您在$NF$1之间添加逗号(即您不会在两者之间看到空格)

答案 1 :(得分:2)

看起来你的线条在换行前以回车结束;也就是说,看起来你已经有了Windows的行结尾。在运行命令之前尝试在文件上运行dos2unix

dos2unix file.txt

答案 2 :(得分:2)

在其他帖子中,您需要dos2unix file.txt或类似。

您还需要指定一些值来分隔要打印的两列,即

 # use the defualt value for FS
 awk '{print $NF , $1}' file.txt 

 # use a tab
 awk '{print $NF "\t" $1}' file.txt

 # use a space
 awk '{print $NF " " $1}' file.txt

另请注意,cat file.txt |的使用会在某些圈子中赢得无用的猫奖:-),所以我在上面的示例中为您的问题提供了更直接的解决方案。

我希望这会有所帮助。

答案 3 :(得分:1)

代码:cat file.txt | awk '{ print $2,$3,$4,$5,$6,$1 }'

输出:288K 280K 80K 64K / system / bin / installd 133 ...

答案 4 :(得分:0)

eol可能是\r。首先更改为\n

mac2unix file.txt