【问题标题】:AIX: remove the last symbols (CRLF) from a fileAIX:从文件中删除最后一个符号 (CRLF)
【发布时间】:2018-02-12 23:33:14
【问题描述】:

有一个大文件,其中最后一个符号是\r\n。我需要删除它们。它似乎等同于删除最后一行(?)。 UPD:不,不是:一个文件只有一行,以\r\n结尾。

我知道两种方法,但都不适用于 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 有什么解决方案吗?必须处理大量大文件,因此性能很重要。

【问题讨论】:

  • Program split(1) 将是一个选项...像这样的东西:export Fname=insertfilenamehere; Fsize="$(set -- ls -l $Fname` ; echo $5)"; export NewSize=$(expr $Fsize - 2); split -b "$NewSize" -- "$Fname"; mv xaa ${Fname}_${NewSize}`
  • dos2unix file 可能就是您所需要的。复制您最小的问题文件并对其进行测试。运气好的话,它会毫无问题地加载或进一步搞乱。请注意,您可以将多个文件指定为dos2unix 的一次调用的参数。祝你好运。
  • 我上一条评论的格式丢失了,下次试试:export Fname=insertfilenamehere; Fsize="$(set -- $(ls -l $Fname); echo $5)"; export NewSize=$(expr $Fsize - 2); split -b "$NewSize" -- "$Fname"; mv xaa ${Fname}_${NewSize}
  • 您的sed 命令不起作用,因为\n 不是处理的字符串的一部分。你真的要删除那个字符吗?

标签: aix


【解决方案1】:

通常,如果您需要通过脚本编辑文件,由于历史原因,我使用ed。例如:

ed - /tmp/foo.txt <<EOF
g/^$/d
w
q
EOF

ed 有点脾气暴躁。另请注意,您并没有真正删除文件底部的空行,而是删除了所有空行。通过ed 和一些练习,您可能可以只删除文件底部的空行。例如转到文件底部,向上搜索非空行,然后向下移动一行并从该点删除到文件末尾。 ed 命令脚本的行为(几乎)如您所愿。

此外,如果它们确实有 \r\n,那么这些不会被视为空行,而是其中包含 control-M (\r) 的行。如果是这种情况,您可能需要调整您的模式。

【讨论】:

    【解决方案2】:

    我对重复问题的回答 https://stackoverflow.com/a/46083912/3220113 也应该在这里起作用。另一种解决方案是使用

    awk ' (NR>1) { print s }
          {s=$0}
          END { printf("%s",substr($2, 1, length($2)-1) ) }
        ' inputfile
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 2018-11-25
      • 2013-09-22
      • 2020-09-26
      相关资源
      最近更新 更多