将一列多个文件附加到一个输出文件
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]
假设我有三个文件
文件 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]