提取特定列并将其粘贴到另一个文本文件中

提取特定列并将其粘贴到另一个文本文件中

我有两个文本文件。我需要复制一个文本文件的 5-6-7 列并将这些列粘贴到另一个文本文件中。例如,文本文件的第一列如下;

文本1

E    GPS41  0  5.68026000000000E+08  1.09767623810000E+04 -1.66840300460000E+04  1.77051348440000E+04

文本_2

E GPS41 568026000 0.000000000000000E+00 1.097676240456553E+04 -1.668403004627044E+04 1.770513486005421E+04 2.140299562139315E+00 -5.351523203487980E-01 -1.876979500368582E+00 1.714052588162549E-05 1.390618031795355E-05 8.605165964871206E-06 3.266367837880071E-09 3.392831966908295E-09 1.626218351208862E-09

我需要复制 text_1 的第 5-6-7 列并将它们粘贴到 text_2 中,如下所示;

新文本

   E GPS41 568026000 0.000000000000000E+00 1.09767623810000E+04 -1.66840300460000E+04  1.77051348440000E+04 2.140299562139315E+00 -5.351523203487980E-01 -1.876979500368582E+00 1.714052588162549E-05 1.390618031795355E-05 8.605165964871206E-06 3.266367837880071E-09 3.392831966908295E-09 1.626218351208862E-09

注意:这个问题与我之前的问题不同。

答案1

这应该可行 - 只要您不关心保留数据中特定数量的空白:

awk '(getline line < "text_1") > -1 {split(line,a); $5 = a[5]; $6 = a[6]; $7 = a[7]} 1' text_2 > new_text

例如给定

$ head text_{1,2}
==> text_1 <==
foo     bar  A B C D E
bar     baz  F G H I J

==> text_2 <==
        foo   bar  a b c d e f g h i j k l m
        bar   baz  f g h i j k l m n o p q r

然后

$ awk '(getline line < "text_1") > -1 {split(line,a); $5 = a[5]; $6 = a[6]; $7 = a[7]} 1' text_2
foo bar a b C D E f g h i j k l m
bar baz f g H I J k l m n o p q r

cut使用和的困难paste在于,至少有一个文件在分隔字段时空格数量不一致。您可以使其适用于您发布的输入,如下所示:

paste <(cut -d ' ' -f1-4 text_2) \
  <(tr -s '[:blank:]' ' ' < text_1 | cut -d ' ' -f5-7) \
  <(cut -d ' ' -f8- text_2) > new_text

前任。

$ paste <(cut -d ' ' -f1-4 text_2) \
    <(tr -s '[:blank:]' ' ' < text_1 | cut -d ' ' -f5-7) \
    <(cut -d ' ' -f8- text_2) > new_text

$ diff -ws new_text your_new_text 
Files new_text and your_new_text are identical

相关内容