我正在尝试执行以下操作:
获取文件的最后一行:tail -n 1 test.csv
如果最后一行是END,那么继续(第3点),否则退出
获取文件中的行数:wc -l test.csv
将这些行放在没有最后一行的新文件中:head -n(length -1)test.csv> testdone.csv
(或者如果可能只从文件中删除此行)
有人可以给我一个关于如何做到这一点的完整脚本吗?
非常感谢你,现在正在寻找/尝试几个小时!
答案 0 :(得分:1)
在unix / linux上尝试(在脚本文件中):
#!/usr/bin/env bash
# 1
lastline=`tail -n 1 test.csv`
# 2
if [ "$lastline" == "END" ]; then
exit
fi
# 3 (actually not needed)
num_lines=`wc -l < test.csv`
# 4 copy all except last line
sed \$d < test.csv > testdone.csv
答案 1 :(得分:0)
获取文件的最后一行:tail -n 1 test.csv
。这样可行。你有什么问题?
如果最后一行是END然后继续(第3点),否则退出
这没有任何意义,因为“文件的最后一行”是最后一行。结束。没有更多的行。
获取文件中的行数:wc -l test.csv
。这样可行。你有什么问题?
将这些行放在没有最后一行的新文件中:head -n (length -1) test.csv > testdone.csv
。
“这些行”很模糊,但显示的代码看起来很棒。你有什么问题?
答案 2 :(得分:0)
尝试这样的事情。
#! /usr/bin/env sh
FILENAME="input.csv"
OUT="output.csv"
echo "Last line:"`tail -n 1 $FILENAME`
linecount=`wc -l $FILENAME|cut -d " " -f 1`
echo "No of lines:$linecount"
linecount=`expr $linecount - 1`
head -n $linecount $FILENAME > $OUT
echo "Copied to $OUT"
答案 3 :(得分:0)
输入文件的大小是多少?
如果它不是太大(小于5兆字节),那么AWK可以帮助你:
awk'{a [++ i] = $ 0} END {if(a [i]〜/ ^ END $ /){delete a [i]; for(i in a){print a [i]&gt ;&GT; “done-”FILENAME}}}'test.csv