awk 命令无法正常工作

awk 命令无法正常工作

我有一个非常简单的问题,但由于某些原因它无法正常工作..

我有.txt以下格式的这些文件

2    250    1
4    250    1
5    250    1

我想从第一列中的数字中减去 1,得到:

1    250    1
3    250    1
4    250    1

我在 bash 中使用这段代码:

awk '{ print $1-1,$2,$3 }' file.txt > newfile.txt

我认为这段代码很好,但是,由于这些文本文件的文件扩展名从 改为.csv.txt这条 awk 行似乎工作得不好。它产生:

1    250    1
4

有什么替代方案可以很好地处理我拥有的这些文本文件吗?

更新:我使用 pico 编辑器重新生成了其中一个文件,现在上面的代码可以完美运行,因此原始文本文件在格式和属性方面一定有问题……有什么见解吗?

答案1

所描述的问题似乎与行结束有关。如果文本文件具有回车符/换行符,则将awk回车符视为另一个空白字符,并覆盖输出中的文本。

OP通过编辑pico(假设换行行结尾,根据此设置换行符的更简单方法页)。人们还可以使用诸如dos2unix修复行结尾之类的程序。

进一步阅读:

答案2

@Thomas Dickey 所说的似乎是解决方案!

我使用此代码perl -pe 's/\r\n|\n|\r/\n/g'将文本文件转换为 unix 格式。它类似于 dos2unix 程序。现在,Awk 可以完美运行了!

感谢大家

答案3

unix2dos/dos2unix实用程序可以很容易地解决这个问题。如果您有UNIX/Linux机器,请尝试安装它并运行以下命令:

dos2unix file

在 中UNIX/Linux,在处理任何文本文件之前,合理的做法是运行该file实用程序以了解它具有哪种字节序。

相关内容