dos/unix编程命令与|初学者问题
我正在努力做到以下几点:dos/unix编程命令与|初学者问题,unix,batch-file,Unix,Batch File,我正在努力做到以下几点: 获取文件的最后一行:tail-n1test.csv 如果最后一行结束,则继续(第3点),否则退出 获取文件中的行数:wc-l test.csv 将这些行放在一个新文件中,不带最后一行:head-n(长度-1)test.csv>testdone.csv (或者,如果可能,仅从文件中删除此行) 有人能给我一个完整的脚本如何做到这一点 非常感谢,已经搜索/尝试了几个小时了 获取文件的最后一行:tail-n1test.csv。这很有效。你的问题是什么 如果最后一行结束,则继续(
非常感谢,已经搜索/尝试了几个小时了 获取文件的最后一行:
tail-n1test.csv
。这很有效。你的问题是什么
如果最后一行结束,则继续(第3点),否则退出
这毫无意义,因为“文件的最后一行”是最后一行。结束。没有更多的线了
获取文件中的行数:wc-l test.csv
。这很有效。你的问题是什么
将这些行放入一个新文件中,不带最后一行:head-n(length-1)test.csv>testdone.csv
“这些行”很模糊,但显示的代码看起来很棒。你的问题是什么?试试这样的方法
#! /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"
在unix/linux上,请尝试(在脚本文件中):
#/usr/bin/env bash
# 1
lastline=`tail-n1test.csv`
# 2
如果[“$lastline”==“END”];然后
出口
fi
#3(实际上不需要)
num_line=`wc-ltestdone.csv
输入文件的大小是多少
如果它不是太大(小于5兆字节),那么AWK可以帮助您:
awk'{a[++i]=$0}END{if(a[i]~/^END$/){delete a[i];for(i in a){print a[i]>>“done-”FILENAME}}}}}test.csv问题是,你能给我完整的脚本吗?什么“完整脚本”?你有三个步骤。你把它们放在一个文件里。你还需要什么?请更新问题,明确说明您想要什么,但您没有。请注意此处几个地方使用的背景标记。backtick表达式被backticks中命令的输出替换为shell。谢谢,我似乎不仅没有让linecount部分工作,当我在命令行中测试它时,-f似乎是3,但我仍然没有得到resultok,您可以使用linecount=
wc-l<$FILENAME
代替linecount=wc-l$FILENAME | cut-d”“-f 1
,安德烈·霍尔兹纳已经在下面做了。谢谢!成功了!filename=XXG.csv lastline=tail-n 1“$filename”
#如果最后一行是END,则[“$lastline”==“END”];然后#复制除最后一行sed\$d<“$filename”>po.csv以外的所有内容
#!/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