【问题标题】:Appending a column of multiple files to one output file将一列多个文件附加到一个输出文件
【发布时间】:2015-06-26 21:16:37
【问题描述】:

假设我有三个文件

文件1

1  10.0
2  13.0
3  14.0

文件2

1  14.0
2  11.0
3  12.0

文件3

1  9.0
2  11.0
3  4.0

我想将文件合并到一个输出中

输出文件

10.0 14.0 9.0
13.0 12.0 11.0
14.0 12.0 4.0

所有文件的行数完全相同。需要将每个文件的第二列添加到输出文件中

值需要用一个空格分隔。

我想了解如何对多个文件执行此操作,在 awk 或 linux 终端中最多为 4 个。

【问题讨论】:

    标签: awk linux-kernel gawk


    【解决方案1】:

    鉴于您的新问题:

    $ paste file1 file2 file3 | awk '{print $2,$4,$6}'
    10.0 14.0 9.0
    13.0 11.0 11.0
    14.0 12.0 4.0
    

    为了避免硬编码 awk 部分中的字段编号,以便它可以与粘贴的任何输出一样工作:

    $ paste file1 file2 file3 | awk '{for (i=2;i<=NF;i+=2) printf "%s%s",$i,(i<NF?OFS:ORS)}'
    10.0 14.0 9.0
    13.0 11.0 11.0
    14.0 12.0 4.0
    

    【讨论】:

    • 为什么这个代码:join -o 1.2,2.2,3.2 file1 file2 file3 &gt; outputfile 不起作用?为了合并两个以上的文件
    • paste file1 file2 file3 | awk '{print $2,$4,$6}' &gt; outputfile 为我工作,谢谢
    【解决方案2】:
    join file1 file2 | awk '{print $2 $3}' > outputfile
    

    连接取决于索引列和间距。

    cat file* | awk '{ if( $1 in x ) { x[$1] = x[$1] " "  $2; } else { x[$1] = $2;}} END{ for( i in x ) { print x[i]; }}' > outputfile
    

    假设所有输入文件具有相同的前缀,并且所有文件都根据索引列值(即$1)连接(而不是简单地通过行索引)。

    【讨论】:

    • 有3个文件要加入。
    • 相信原始问题只有 2 个文件。
    • 我的错。否决票被撤销。不过,您应该修改您的答案,因为它不再回答问题。
    【解决方案3】:

    如果正在运行 linux,请尝试使用 paste 命令。

    paste -d " " file1 file2  > file3
    

    【讨论】:

    • 有3个文件要加入。
    • @glenn 不是在他最初提出问题的时候。
    【解决方案4】:

    对于N文件list1.txt、list2.txt、...中相同格式的文件数...

    paste list?.txt | awk '{line=sep=""; for(i=2;i<=NF;i+=2) {line = line sep $i; sep=FS} print line}'
    

    【讨论】:

      【解决方案5】:

      将 bash 的进程替换与 join 命令一起使用:

      join <(join file1 file2) file3 | cut -d" " -f2-
      
      10.0 14.0 9.0
      13.0 11.0 11.0
      14.0 12.0 4.0
      

      使用 awk,您可以编写:

      awk '
          {result[FNR] = result[FNR] $2 FS} 
          END {for (i=1; i<=FNR; i++) print result[i]}
      ' file[123]
      

      【讨论】:

        猜你喜欢
        • 2020-03-19
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        • 2019-08-15
        • 2014-02-26
        • 2021-08-29
        • 2019-04-03
        • 1970-01-01
        相关资源
        最近更新 更多