将一列多个文件附加到一个输出文件

Appending a column of multiple files to one output file

假设我有三个文件

文件 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

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

值需要用一个分隔 space。

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

鉴于您的新问题:

$ paste file1 file2 file3 | awk '{print ,,}'
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

如果运行 linux 尝试使用粘贴命令。

paste -d " " file1 file2  > file3
join file1 file2 | awk '{print  }' > outputfile

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

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

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

在文件 list1.txt、list2.txt、...

中有 N 个相同格式的文件
paste list?.txt | awk '{line=sep=""; for(i=2;i<=NF;i+=2) {line = line sep $i; sep=FS} print line}'

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

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]  FS} 
    END {for (i=1; i<=FNR; i++) print result[i]}
' file[123]