使用 wc -l 和 sed 从假脱机文件中删除最后三行
Remove three last lines from spool file using wc -l and sed
我遇到一个问题,我的文件每次都有不同的行数,它以显示导出到文件的行数的 sqlldr 输出结尾
40968 rows selected.
因为这个文件将被下一个进程拾取,所以我想去掉这个额外的文本。
所以我想出了这样的想法:
# Remove exported record count from end of file
remove_count=$(( $(wc -l < ${output_dir}/file.dat)-3+1 ))
echo "Removing extra lines from spooled file"
sed '$remove_count, $ d' file.dat >> file.dat
问题是 sed
似乎不能使用变量作为行数,之后它应该开始删除。我找不到更好的解决方案。
有什么我可以做得更好或有人看到错误吗?
提前致谢!
sed
可以包含变量扩展。
这是正确 bash
引用的问题。
'
防止字符串中的任何 bash
扩展。
"
允许字符串中的所有 bash
扩展。
建议尝试:
# Remove exported record count from end of file
remove_count=$(( $(wc -l < ${output_dir}/file.dat)-3+1 ))
echo "Removing extra lines from spooled file"
sed -i "$remove_count, $ d" file.dat
你不需要这么复杂的解决方案; head
可以这样做:
$ echo -e 'first\nsecond\nthird\nfourth' | head -n-3
first
查看手册:
-n, --lines=[-]NUM
print the first NUM lines instead of the first 10; with the
leading '-', print all but the last NUM lines of each file
这可能适合您 (GNU sed):
sed '1N;N;$d;P;D' file
这将删除文件的最后 3 行。
程序化版本为:
sed ':a;N;s/[^\n]*/&/3;Ta;d$;P;D' file
其中 3
可以是从文件末尾算起的任意行数。
我遇到一个问题,我的文件每次都有不同的行数,它以显示导出到文件的行数的 sqlldr 输出结尾
40968 rows selected.
因为这个文件将被下一个进程拾取,所以我想去掉这个额外的文本。 所以我想出了这样的想法:
# Remove exported record count from end of file
remove_count=$(( $(wc -l < ${output_dir}/file.dat)-3+1 ))
echo "Removing extra lines from spooled file"
sed '$remove_count, $ d' file.dat >> file.dat
问题是 sed
似乎不能使用变量作为行数,之后它应该开始删除。我找不到更好的解决方案。
有什么我可以做得更好或有人看到错误吗?
提前致谢!
sed
可以包含变量扩展。
这是正确 bash
引用的问题。
'
防止字符串中的任何 bash
扩展。
"
允许字符串中的所有 bash
扩展。
建议尝试:
# Remove exported record count from end of file
remove_count=$(( $(wc -l < ${output_dir}/file.dat)-3+1 ))
echo "Removing extra lines from spooled file"
sed -i "$remove_count, $ d" file.dat
你不需要这么复杂的解决方案; head
可以这样做:
$ echo -e 'first\nsecond\nthird\nfourth' | head -n-3
first
查看手册:
-n, --lines=[-]NUM
print the first NUM lines instead of the first 10; with the
leading '-', print all but the last NUM lines of each file
这可能适合您 (GNU sed):
sed '1N;N;$d;P;D' file
这将删除文件的最后 3 行。
程序化版本为:
sed ':a;N;s/[^\n]*/&/3;Ta;d$;P;D' file
其中 3
可以是从文件末尾算起的任意行数。