2014-12-07 49 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 ... 
相关问题