【问题标题】:How to directly append columns of one file to another file如何直接将一个文件的列附加到另一个文件
【发布时间】:2019-01-19 20:27:47
【问题描述】:

要求:仅 grep/cut/join/cat/regex/for/while。

我是 shell 实用程序的初学者。

我有 fileA 和 fileB 包含相同数量的行。我想将 fileB 的列附加到 fileA 中。

我正在尝试这个(cat fileA && cat fileB) > fileC。但它没有按要求工作。

预期:

文件A:

1
2
3

文件B:

1
2
3

那么 fileC 应该有:

1 1
2 2
3 3

【问题讨论】:

  • 请在您的问题中添加示例输入和该示例输入所需的输出。
  • 请也阅读要求
  • 使用的操作系统是什么,我可以知道将其限制为仅这些命令的原因
  • 操作系统是 linux(ubuntu 18.04)。我必须遵守给定的要求。

标签: bash awk cut cat


【解决方案1】:

使用 bash:

#!/bin/bash

while true; do
  read -r f1 <&3 || break
  read -r f2 <&4 || break
  echo "$f1 $f2"
done 3<fileA 4<fileB >fileC

输出到文件C:

1 1 2 2 3 3

见:https://unix.stackexchange.com/a/26604/74329

【讨论】:

  • 这是我需要的。谢谢
  • 我可以知道原因吗,你为什么添加|| break
  • 没有break,无限循环(while true)永远不会结束。因此,当 fileA 或 fileB 被读取到末尾时,循环结束。
  • 为什么不while read -r f1 &lt;&amp;3 &amp;&amp; read -r f2 &lt;&amp;4; do printf '%s %s\n' "$f1" "$f2"; done 3&lt;fileA 4&lt;fileB &gt;fileC
【解决方案2】:

使用 Perl 的一种方式

$ perl -e ' BEGIN { @a=map{chomp;$_} qx(cat fileA); @b=map{chomp;$_} qx(cat fileB); printf("%s %s\n",$a[$_],$b[$_]) for (0..$#a) } '
1 1
2 2
3 3

$

一般使用粘贴命令来完成

$ paste -d" " fileA fileB
1 1
2 2
3 3

$

您的意见

$ cat fileA
1
2
3

$ cat fileB
1
2
3

$

paste 命令只是使用默认的制表符分隔符垂直连接文件。您可以使用 -d 选项覆盖分隔符

【讨论】:

  • 我在 cmets 中向 OP 建议 paste,但 OP 告诉不允许似乎 :)
猜你喜欢
  • 2018-12-06
  • 2019-08-15
  • 2021-03-09
  • 1970-01-01
  • 2020-03-19
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多