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(长度-1)test.csv>testdone.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