【问题标题】:How to combine a line (space-separated) and a file (one-value per line) into one?如何将一行(空格分隔)和一个文件(每行一个值)合并为一个?
【发布时间】:2013-02-15 06:10:55
【问题描述】:

给定一行

    100  90  80  70  60  50  40  30  20  10   0

还有一个文件

1
2
3
4
5
6
7
8
9
10
11

如何将这两个合并到一个文件中

100 1
90  2
80  3
70  4
60  5
50  6
40  7
30  8
20  9
10  10
0  11

我猜sedawk 是我的朋友,但没有和他们打交道的经验……

【问题讨论】:

  • Separated 用 a 拼写,而不是 e。你可以通过这句话记住这一点:There are "a rat" in separate。

标签: sed awk


【解决方案1】:

或者使用trpaste

$ tr ' ' '\n' < file1 | paste - file2
100     1
90      2
80      3
70      4
60      5
50      6
40      7
30      8
20      9
10      10
0       11

【讨论】:

  • +1,但 xargs 似乎有点矫枉过正。 tr \ \\n 似乎更清晰了。
【解决方案2】:
$ cat file2
1
2
3
4
5
6
7
8
9
10
11
$
$ cat file1
100    90        80  70      60 50 40 30 20 10 0
$
$ $ gawk '!NF{next} NR==FNR{a[++nr1]=$0;next} {print $0,a[++nr2]}' file2 RS="[[:space:]]+" file1
100 1
90 2
80 3
70 4
60 5
50 6
40 7
30 8
20 9
10 10
0 11

【讨论】:

  • 以什么方式?请参阅我编辑的帖子。请注意,我在 file1 的末尾有一个空格,如果您使用 GNU awk,您可以摆脱它并设置 RS="[[:space:]]"。
  • 在我的file1中,条目之间有五个空格,而不仅仅是一个。很抱歉这个误导性问题。
  • 然后使用 gawk 并将 RS 设置为“[[:space:]]+”。我更新了我的答案以表明这一点。
  • 谢谢!这几乎是正确的。我注意到我的 file2 以空格开头,所以你的答案的结果是一行。
  • 等一下 - 在您更新的问题 file1 现在以空格开头,而不是 file2。是哪个?
【解决方案3】:

尝试这样做:

paste <(printf '%s\n' 100 90 80 70 60 50 40 30 20 10 0) file.txt

在这张照片中,pasteprocess-substitutionprintf 是你的朋友 =)

输出

100     1
90      2
80      3
70      4
60      5
50      6
40      7
30      8
20      9
10      10
0       11

【讨论】:

    【解决方案4】:

    另一个 awk:

    awk '{if(NR==1) split($0,N); else print N[FNR], $0}' file1 file2
    

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2014-06-19
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多