我試圖做到以下幾點:使用|的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