AIX:删除文件中的最后一个符号(CRLF)
问题描述:
有一个大文件,其中最后一个符号是\r\n
。我需要删除它们。这似乎等同于删除最后一行(?)。 UPD:不,它不是:一个文件只有一行,以\r\n
结尾。AIX:删除文件中的最后一个符号(CRLF)
我知道两种方法,但都没有为AIX工作:
sed 's/\r\n$//' file # I don't why it doesn't work
head -c-2 # head doesn't work with negative numbers
是否有任何AIX的解决方案?许多大文件必须处理,所以性能很重要。
答
通常,如果您需要通过脚本编辑文件,由于历史原因,我使用ed
。例如:
ed - /tmp/foo.txt <<EOF
g/^$/d
w
q
EOF
ed
不仅仅是有点诡异。还要注意,你并没有真正删除文件底部的空行,而是删除了所有空行。使用ed
和一些练习,您可能只能删除文件底部的空行。例如转到文件底部,搜索一个非空行,然后向下移动一行并从该点删除到该文件的末尾。 ed
命令脚本的行为(几乎),你所期望的。另外,如果他们确实有\ r \ n,那么这些不会被认为是空行,而是在其中具有控制-M(\ r)的行。如果是这种情况,你可能需要调整你的模式。
答
我的回答https://stackoverflow.com/a/46083912/3220113重复的问题也应该在这里工作。另一种解决方案是使用
awk ' (NR>1) { print s }
{s=$0}
END { printf("%s",substr($2, 1, length($2)-1)) }
' inputfile
程序'split(1)'是一个选项...类似这样的:'export Fname = insertfilenamehere; Fsize =“$(set - 'ls -l $ Fname'; echo $ 5)”;导出NewSize = $(expr $ Fsize - 2); split -b“$ NewSize” - “$ Fname”; mv xaa $ {Fname} _ $ {NewSize}' –
'dos2unix文件'可能是您所需要的。制作一份最小的问题文件并对其进行测试。幸运的是,它会加载没有问题或进一步搞乱。请注意,您可以指定多个文件作为一个'dos2unix'调用的参数。祝你好运。 – shellter
我的最后一条评论失去了格式,接下来尝试:'export Fname = insertfilenamehere; Fsize =“$(set - $(ls -l $ Fname); echo $ 5)”;导出NewSize = $(expr $ Fsize - 2); split -b“$ NewSize” - “$ Fname”; mv xaa $ {Fname} _ $ {NewSize}' –