我有两个文本文件。我需要复制一个文本文件的5-6-7列,并将这些列粘贴到另一个文本文件中。例如,文本文件的第一列如下;
text_1
E GPS41 0 5.68026000000000E+08 1.09767623810000E+04 -1.66840300460000E+04 1.77051348440000E+04text_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;
new_text
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注:这个问题与我以前的问题不同。
发布于 2018-07-02 16:16:57
如果您不关心在数据中保留特定数量的空白,这应该是可行的:
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 identicalhttps://askubuntu.com/questions/1051548
复制相似问题