我试图做到以下几点:使用|的dos/unix编程命令初学者的问题
获取文件的最后一行:尾-n 1 test.csv
如果这最后一行END然后继续(点3),否则退出
得到线的量在文件中:WC -l test.csv
放入一个新的文件,这些行没有最后一行:头-n(长度-1) test.csv> testdone.csv
(或者,如果有可能从文件中删除仅此线)
可有人请给我如何做这一个完整的脚本?
非常感谢你,一直在寻找/尝试几个小时!
我试图做到以下几点:使用|的dos/unix编程命令初学者的问题
获取文件的最后一行:尾-n 1 test.csv
如果这最后一行END然后继续(点3),否则退出
得到线的量在文件中:WC -l test.csv
放入一个新的文件,这些行没有最后一行:头-n(长度-1) test.csv> testdone.csv
(或者,如果有可能从文件中删除仅此线)
可有人请给我如何做这一个完整的脚本?
非常感谢你,一直在寻找/尝试几个小时!
在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
获取文件的最后一行:tail -n 1 test.csv
。这样可行。你有什么问题?
如果最后一行是那么END继续(3点),否则退出
这是没有意义的,因为“该文件的最后一行”是最后一行。结束。没有更多的线。
获取文件中的行数:wc -l test.csv
。这样可行。你有什么问题?
将这些行放在没有最后一行的新文件中:head -n (length -1) test.csv > testdone.csv
。
“这些行”含糊不清,但显示的代码看起来不错。你有什么问题?
问题是,你可以给我满脚本? – Paintrick 2010-08-08 12:09:09
什么是“完整脚本”?你有三个步骤。你把它们放在一个文件中。你还需要什么?请**更新**问题,具体说明你想要的,你没有的。 – 2010-08-08 13:12:51
尝试类似这样的事情。
#! /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"
注意在这里的几处地方使用反引号。 反引号表达式由shell中的反引号中的命令输出替换。 – 2010-08-08 12:49:04
谢谢,我似乎只得到linecount部分工作, 当我在命令行测试它,-f似乎是3, ,但我仍然没有结果 – Paintrick 2010-08-08 13:01:17
行..相反,您可以使用linecount ='wc -l <$ FILENAME' 而不是linecount ='wc -l $ FILENAME | cut -d“”-f 1' 正如Andre Holzner所做的那样。 – aNish 2010-08-08 13:28:08
这是输入文件的大小?
如果不是太大(小于5兆字节),然后AWK可以帮助您:
AWK“{A [++ I] = $ 0} END {如果(A [1]〜/^END $ /){delete a [i]; for(i in a){print a [i] >>“done-”FILENAME}}}'test.csv
谢谢!做到了! 文件名= XXG.csv lastLine所='尾-n 1 “$文件名”' #如果最后一行是END 如果[ “$ lastLine所” == “END”];然后 #复制除最后一行以外的所有内容 sed \ $ d <“$ filename”> po.csv fi – Paintrick 2010-08-08 14:10:09