我有两个文本文件。我需要复制一个文本文件的 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