2014-10-08 69 views
0

我知道如何将文件中的行转置为列,但是我想将文件的下半部分的行追加到上半部分的行中。Bash rows to column

像:

A1 
A2 
A3 
B1 
B2 
B3 

A1 | B1 
A2 | B2 
A3 | B3 

名单来自两个grep秒。我将第一个grep追加到第二个。两个grep具有相同的命中数量。

我想在bash脚本中做到这一点。

+0

尽量给更多的背景上您'grep's等,使我们能提供更好的答案。另外,你到目前为止做了什么? – fedorqui 2014-10-08 15:48:56

回答

2

如何将headtailpaste一起组合?

paste -d'|' <(head -3 file) <(tail -3 file) 

它返回:

A1|B1 
A2|B2 
A3|B3 

paste合并文件的线条。如果我们从同一个文件提供不同的行......就这些!

由于它是由线条和从静止tail的一半得到head的问题,这是一个更通用的方法:

paste -d'|' <(head -n $(($(wc -l <file)/2)) file) 
      <(tail -n $(($(wc -l <file)/2)) file) 
1

只是作为一种替代:

awk 'BEGIN{c=0} 
    {a[c++] = $1} 
    END { for (i = 0; i < c/2; i++) print a[i] " " a[i+c/2]}' 

这假设你有一个偶数行作为输入。

2

您正在寻找的pr工具:

printf "%s\n" {A,B}{1,2,3} | pr -2 -T -s" | " 
A1 | B1 
A2 | B2 
A3 | B3 
+0

在Solaris上:'pr -2 -T -s“|”' - >'pr:非法选项-t'和'pr -2 -s“|”' - >'pr:非法选项 - |'。这是GNU'pr'还是什么? – 2014-10-08 16:15:42

2
$ awk '{a[NR]=$0} END{ m=NR/2; for (i=1;i<=m;i++) print a[i] " | " a[i+m]}' file 
A1 | B1 
A2 | B2 
A3 | B3 
相关问题