我有一个非常简单的问题,但由于某些原因它无法正常工作..
我有.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
实用程序以了解它具有哪种字节序。