2010-08-08 85 views
0

我试图做到以下几点:使用|的dos/unix编程命令初学者的问题

  1. 获取文件的最后一行:尾-n 1 test.csv

  2. 如果这最后一行END然后继续(点3),否则退出

  3. 得到线的量在文件中:WC -l test.csv

  4. 放入一个新的文件,这些行没有最后一行:头-n(长度-1) test.csv> testdone.csv

(或者,如果有可能从文件中删除仅此线)

可有人请给我如何做这一个完整的脚本?

非常感谢你,一直在寻找/尝试几个小时!

回答

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 
+0

谢谢!做到了! 文件名= XXG.csv lastLine所='尾-n 1 “$文件名”' #如果最后一行是END 如果[ “$ lastLine所” == “END”];然后 #复制除最后一行以外的所有内容 sed \ $ d <“$ filename”> po.csv fi – Paintrick 2010-08-08 14:10:09

0

获取文件的最后一行:tail -n 1 test.csv。这样可行。你有什么问题?

如果最后一行是那么END继续(3点),否则退出

这是没有意义的,因为“该文件的最后一行”是最后一行。结束。没有更多的线。

获取文件中的行数:wc -l test.csv。这样可行。你有什么问题?

将这些行放在没有最后一行的新文件中:head -n (length -1) test.csv > testdone.csv

“这些行”含糊不清,但显示的代码看起来不错。你有什么问题?

+1

问题是,你可以给我满脚本? – Paintrick 2010-08-08 12:09:09

+0

什么是“完整脚本”?你有三个步骤。你把它们放在一个文件中。你还需要什么?请**更新**问题,具体说明你想要的,你没有的。 – 2010-08-08 13:12:51

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" 
+0

注意在这里的几处地方使用反引号。 反引号表达式由shell中的反引号中的命令输出替换。 – 2010-08-08 12:49:04

+0

谢谢,我似乎只得到linecount部分工作, 当我在命令行测试它,-f似乎是3, ,但我仍然没有结果 – Paintrick 2010-08-08 13:01:17

+0

行..相反,您可以使用linecount ='wc -l <​​$ FILENAME' 而不是linecount ='wc -l $ FILENAME | cut -d“”-f 1' 正如Andre Holzner所做的那样。 – aNish 2010-08-08 13:28:08

0

这是输入文件的大小?

如果不是太大(小于5兆字节),然后AWK可以帮助您:

AWK“{A [++ I] = $ 0} END {如果(A [1]〜/^END $ /){delete a [i]; for(i in a){print a [i] >>“done-”FILENAME}}}'test.csv