我有两个我想要在一起的文件。但是,应省略第一个文件的最后一行和最后一个文件的第一行。
我确信这可以在UNIX shell(或者更确切地说,Cygwin)中完成。但是如何?
答案 0 :(得分:15)
$ head --lines=-1 file1 > res
$ tail --lines=+2 file2 >> res
答案 1 :(得分:3)
你可以使用:
head -n -1 file1 && tail -n +2 file2
head显示文件的第一行,param -n显示文件的前n行,但是如果你在数字前加上 - ,则显示除最后n行之外的所有文件。
尾巴是模拟的..
以便更好地参考:
man head
man tail
答案 2 :(得分:2)
head -n -1 file1
将打印file1
中除最后一行之外的所有行。
tail -n +2 file2
将打印file2
中除第一行以外的所有行。
将两者合并为:
head -n -1 file1 ; tail -n +2 file2
答案 3 :(得分:2)
awk 'FNR>2{print p}{p=$0}' file1 file2
按要求说明:
FNR是当前正在处理的文件的当前记录号。 在每次迭代开始时,该行存储在“p”变量中,但尚未打印出来。当记录号达到3时,打印出变量“p”,其中包含记录2.这意味着第2行。当awk到达文件末尾时,最后一行不打印出来然后转到下一个文件。
答案 4 :(得分:1)
以下成绩单显示了如何实现这一目标:
pax> cat file1.txt
1.1
1.2
1.3
1.4
1.5
pax> cat file2.txt
2.1
2.2
2.3
2.4
2.5
pax> head --lines=-1 file1.txt ; tail --lines=+2 file2.txt
1.1
1.2
1.3
1.4
2.2
2.3
2.4
2.5
给head
命令一个负数,直到结束。同样,以+
开头的计数会导致tail
从该行开始,而不是从末尾开始一定数量的行。
答案 5 :(得分:1)
我无法在Mac上使用以下命令(更具体地说,在Mac OS X 10.7.5上的终端窗口中运行的bash shell中):
head -n -1 file1
上面的命令会生成以下错误消息:
head: illegal line count -- -1
在Mac OS X版本的head中,不接受-n参数的负值。但是,您可以改用sed:
sed -e '$d' file1
[“tail -n +2 file2”似乎在Mac OS X上如上所述工作]
答案 6 :(得分:1)
我经常使用sed
进行头尾动作:
{ sed '$d' file1; sed '1d' file2; } > combined