我知道如何将文件中的行转置为列,但是我想将文件的下半部分的行追加到上半部分的行中。Bash rows to column
像:
A1
A2
A3
B1
B2
B3
到
A1 | B1
A2 | B2
A3 | B3
名单来自两个grep
秒。我将第一个grep
追加到第二个。两个grep
具有相同的命中数量。
我想在bash脚本中做到这一点。
我知道如何将文件中的行转置为列,但是我想将文件的下半部分的行追加到上半部分的行中。Bash rows to column
像:
A1
A2
A3
B1
B2
B3
到
A1 | B1
A2 | B2
A3 | B3
名单来自两个grep
秒。我将第一个grep
追加到第二个。两个grep
具有相同的命中数量。
我想在bash脚本中做到这一点。
如何将head
和tail
与paste
一起组合?
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)
只是作为一种替代:
awk 'BEGIN{c=0}
{a[c++] = $1}
END { for (i = 0; i < c/2; i++) print a[i] " " a[i+c/2]}'
这假设你有一个偶数行作为输入。
在Solaris上:'pr -2 -T -s“|”' - >'pr:非法选项-t'和'pr -2 -s“|”' - >'pr:非法选项 - |'。这是GNU'pr'还是什么? – 2014-10-08 16:15:42
$ 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
尽量给更多的背景上您'grep's等,使我们能提供更好的答案。另外,你到目前为止做了什么? – fedorqui 2014-10-08 15:48:56