所以我有一个文件,我想将最后3000行移动到另一个不同的文件,然后从原始文件创建一个没有最后3000行的新文件。
我正在使用Mac,我使用的命令如下:
tail -n 3000 fer2017-testing-reduced.arff >> fer2017-training-reduced-3000-more-instances.arff; head -n -3000 fer2017-testing-reduced.arff > fer2017-testing-reduced-3000-less-instances.arff
然而,当我运行它时,我收到错误:
head: illegal line count -- -3000
我不确定我哪里出错了,或者这可能是一个mac问题?
答案 0 :(得分:4)
并非head
的所有版本都支持负线计数。
macOS上安装的默认设置没有。
如果您安装了coreutils
(如果您安装了Homebrew,则可以执行此操作:brew install coreutils
)您应该可以使用ghead -n -3000
。
答案 1 :(得分:3)
如果允许使用其他工具,可以转到sed
sed -n '3000,${p}' file > filenew # print lines 3000 to end to new file
sed -i '3000,${d}' file # Use inplace edit to delete lines 3000 to end from orig.
此处的优点是$
自动匹配最后一行。
答案 2 :(得分:2)
阅读更多信息来自POSIX head
and tail
not feature equivalent,head
的POSIX版本不接受-n
选项的否定整数。
从POSIX head
命令文档中进行Qutoting,
-n number
每个输入文件的第一个数字行应复制到标准输出。 应用程序应确保number-argument参数为正十进制整数。
您最好将head -n -3000
更改为tail -n +3001
,从第3000
行开始到文件末尾。或者使用GNU支持的head
命令,它在Mac上作为GNU coreutils的一部分提供。