2010-08-08 45 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