2014-12-07 90 views
1

輸入文件:ankit.txt用頭日期和尾算爲什麼在shell腳本輸出文件被寫成單行?

H2014-12-02 
12ASDF23 FGHJ HJKL 
123ASD23 FGHJ HJKL 
123ASD23 FGHJ HJKL 
123ASD23 FGHJ HJKL 
T000004 

我想要的數據,而不頭部和尾部。

命令:

head -n -1 ankit.txt | tail -n +2 >output 

在shell腳本

echo `head -n -1 ankit.txt | tail -n +2` >output 

Iutput:

12ASDF23 FGHJ HJKL 123ASD23 FGHJ HJKL 123ASD23 FGHJ HJKL 123ASD23 FGHJ HJKL 

輸出來作爲一行...(那我不想

我嘗試在shell腳本中簡單地給出cat命令,但顯示的dadata也是作爲單行

我在shell腳本中嘗試了沒有echo的相同命令。

即使我保持1個命令來顯示通過外殼腳本輸出:

cat ankit.txt 

輸出是單個線。 wc -l給出了正確的計數,但簡單的cp也給出了單行輸出。

cp ankit.txt output 
+4

你不需要'echo'。 – 2014-12-07 08:33:38

+0

@Ankit:正如Karoly Horvath提到的,在腳本中不使用'echo \''''命令。 – Cyrus 2014-12-07 09:26:56

+0

你是FTP的文件,還是在你運行以上所有的系統上創建的? – tvCa 2014-12-07 11:52:07

回答

0

看起來像你有Windows行結束。你有兩個選擇。無論是預處理輸入文件給它UNIX的結局:

dos2unix ankit.txt 

否則做,因爲你管的一部分:

dos2unix < ankit.txt | head -n -1 | tail -n +2 > output 

注意dos2unix有兩種模式。在第一種情況下,它將採用輸入文件並用UNIX行結尾重寫(這對於預處理非常理想)。在第二種情況下,它將從標準輸入讀取並將新輸出寫入標準輸出(這對管道來說很理想)。

+0

如果CRLF行結尾('\ r \ n')是問題,則症狀會有所不同。例如,試試'echo $(printf'line 1 \ r \ nline 2 \ r \ n')'。 – mklement0 2017-05-10 14:31:04

4

使用

echo `command` 

是不僅造成浪費,它也將在輸出從command它傳遞給echo之前執行空白分裂和水珠擴張。通常你只是想

command 

,或者如果你堅持這樣的一個進程替換,並期望其輸出被保存下來,把它放在雙引號:

echo "$(command)" 

(還要注意切換到現代,推薦的過程替換語法。)

但是,真的,爲什麼要這樣做?如果你真的這樣做,是不是還會更好?

echo "$(echo "$(echo "$(echo "$(echo ...