2013-03-20 20 views
0

我有时间与我的语法在这里: 我有3个文件与各种内容file1 file2 file3(100 +行)。我试图将它们合并在一起,但只有每个文件的第一行应该合并。问题的关键是使用的bash的一行代码就做:你可能想尝试 head -n1 -q file1 file2 file3的文件1Unix:一行bash命令将3个文件合并在一起。只提取每个的第一行

+0

几乎没有如果使用Gnu sed; 'sed -ns'1p'file {1,2,3}' – potong 2013-03-21 09:14:52

回答

6

只有 sed -n 1p file1 file2 file3回到第一线。

+0

尽管这是最好的办法,但我认为OP会特别要求'sed'。 – bitmask 2013-03-20 16:46:29

+0

@bitmask:这不是我正在阅读的问题。我认为OP在询问“如何使用一行bash代码”,而“sed”只是一个例子。我可能是错的。 – NPE 2013-03-20 16:47:12

+0

很酷谢谢。你们真棒 – user2180912 2013-03-20 18:00:55

2

如果通过合并表示连接或连接,尚不清楚。

awk通过接合(在印刷并排的文件中的每个第一行):通过连接(在印刷了一个又一个的文件中的每个第一行)

$ awk 'FNR==1{printf "%s ",$0}' file1 file2 file3 
1 2 3 

awk

$ awk 'FNR==1' file1 file2 file3 
1 
2 
3 
+0

很酷谢谢。你们真棒 – user2180912 2013-03-20 17:01:44

+1

@ user2180912你应该接受哪个答案对你最有帮助。您可以通过点击答案旁边的勾号来做到这一点。 – 2013-03-20 17:04:14

+0

sudo_O FNR部分在awk行中代表什么? – user2180912 2013-03-20 18:03:41

2

我建议你使用head,正如themel的解释所解释的那样。但是,如果您坚持使用sed,则不能简单地将所有文件传递给它,因为它们是隐式连接的,并且分别丢失了每个文件中第一行的内容。所以,如果你真的想这样做的SED,您需要的bash来帮助你:

for f in file1 file2 file3; do sed -n 1p "$f"; done 
+0

很酷谢谢。你们真棒 – user2180912 2013-03-20 17:01:07

1

你能避免使用read内置命令调用外部程序:

for f in file1 file2 file3; do read l < $f; echo "$l"; done > merged.txt 
相关问题