并排排序两个由空格分隔的列表

并排排序两个由空格分隔的列表

我制作了两个文件,foo.txt 和 bar.txt

foo.txt 看起来像这样:foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10

和 bar.txt:bar1 bar2 bar3 bar4 bar5 bar6 bar7 bar8 bar9 bar10

那么如何获取这两个文本文件并将它们输出到名为 foobar.txt 的文本文件中,并将它们排序为

foo1 bar1
foo2 bar2
foo3 bar3
...

管理员内容:我收到关于这是重复问题的警告,因为人们建议合并

foo1
foo2
foo3
foo4
foo5 

bar1
bar2
bar3
bar4
bar5

是同样的过程。如果您必须这样做,您可以在此处找到新行组合上的问题解决文本:链接到用户2120893的问题

要使用一个命令来编辑间隔项目的文件,您需要使用我在下面使用 awk 标记的答案。我不断看到“如何组合两个列表”和“如何将间隔列表分离成新行列表”的问题,但从来没有使用 awk 的单行命令通过 awk 函数分离两个间隔列表,然后通过 awk 指定将它们组合起来。非常感谢 Sergiy Kolodyazhny 最终回答了我的问题(并且只使用一个命令来完成它!)。我一直在寻找这个问题的答案,一个 awk 向导介入向我们展示了诀窍。感谢 John1024 的另一个很好的答案。

答案1

让我们从这两个文件开始:

$ cat foo.txt 
foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 foo10
$ cat bar.txt 
bar1 bar2 bar3 bar4 bar5 bar6 bar7 bar8 bar9 bar10

将它们组合在一起:

$ paste <(tr ' ' '\n' <foo.txt) <(tr ' ' '\n' <bar.txt)
foo1    bar1
foo2    bar2
foo3    bar3
foo4    bar4
foo5    bar5
foo6    bar6
foo7    bar7
foo8    bar8
foo9    bar9
foo10   bar10

或者:

$ awk -v RS='[[:space:]]+' 'FNR==NR{a[NR]=$0; next} {print a[FNR],$0}' foo.txt bar.txt
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
foo6 bar6
foo7 bar7
foo8 bar8
foo9 bar9
foo10 bar10

答案2

构建于希尔西的回答这个类似的问题,如果你使用 bash,你可以这样做

paste <(tr ' ' '\n' < foo.txt) <(tr ' ' '\n' < bar.txt)

使用进程替换 ( <(…)) 将文件中的空格转换为换行符。

答案3

作为已经发布的转置和组合方法的替代方案,这里有一个组合和转置方法:

$ cat foo.txt bar.txt | rs -T
foo1   bar1
foo2   bar2
foo3   bar3
foo4   bar4
foo5   bar5
foo6   bar6
foo7   bar7
foo8   bar8
foo9   bar9
foo10  bar10

答案4

可以通过以下方式实现awk

$ awk 'NR==FNR{split($0,a);}NR!=FNR{for(i=1;i<=NF;i++) print a[i],$i}' foo.txt bar.txt
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5
foo6 bar6
foo7 bar7
foo8 bar8
foo9 bar9
foo10 bar10

相关内容