我有一个包含许多字段的文件,我想用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
那不是我想要的!我希望数字出现在文本的右边,而不是重叠。知道为什么会这样吗?
答案 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