我正在尝试将两个文本文件与存储在输出文件merged_file.txt
中单独列中的数据合并在一起。
文件_1:
Temp[K] Time(s) dT
314.1 1.2 0.4
317.4 4.2 0.3
319.9 7.2 0.5
文件_2:
Temp[K] Time(s) dT
312.1 1.2 0.2
315.3 4.2 0.3
316.7 7.2 0.2
合并文件:
Temp[K] Time(s) dT Temp[K] Time(s) dT
314.1 1.2 0.4 312.1 1.2 0.2
我对Unix和bash shell还是比较陌生,但是我做了一些研究,发现了paste
和pr
。对于paste
,我尝试使用定界符' '
,但它不起作用。
$ paste -d' ' File_1.txt File_2.txt | column -s $'\t' -t > merged_file.txt
$ pr -m -t File_1.txt File_2.txt > merged_file.txt
数据始终存储在彼此之间,在任何情况下都不起作用。
答案 0 :(得分:0)
您可以使用awk
和内置变量FILENAME
将每个文件读入数组,然后使用END
块并排输出。您可以使用简单的检查if ($0 == "")
来检查并丢弃空行。
例如,如果数据位于文件f1
和f2
中,则可以执行以下操作:
awk '
FILENAME=="f1"{if ($0 != "") a[i++] = $0}
FILENAME=="f2"{if ($0 != "") b[j++] = $0}
END {for (k = 0; k < i; k++) print a[k], b[k]}' f1 f2
说明
FILENAME=="f1"{if ($0 != "") a[i++] = $0}
,如果文件为f1
,并且该行不为空,则将其读入数组a[]
; f2
的同上,但读入b[]
数组; END {for (k = 0; k < i; k++) print a[k], b[k]}
处理完两个文件中的所有行之后,循环i
次,打印a[]
和b[]
数组的内容,并用空格隔开(您可以添加额外检查以确保i == j
)使用/输出示例
$ awk '
> FILENAME=="f1"{if ($0 != "") a[i++] = $0}
> FILENAME=="f2"{if ($0 != "") b[j++] = $0}
> END {for (k = 0; k < i; k++) print a[k], b[k]}' f1 f2
Temp[K] Time(s) dT Temp[K] Time(s) dT
314.1 1.2 0.4 312.1 1.2 0.2
317.4 4.2 0.3 315.3 4.2 0.3
319.9 7.2 0.5 316.7 7.2 0.2
答案 1 :(得分:0)
您使用column -s $'\t'
。
列的-s选项指定输入文件中使用的定界符。
输入文件中有空格并使用paste -d' '
时,请保留默认值。
$ paste -d' ' File_1 File_2 | column -t
Temp[K] Time(s) dT Temp[K] Time(s) dT
314.1 1.2 0.4 312.1 1.2 0.2
317.4 4.2 0.3 315.3 4.2 0.3
319.9 7.2 0.5 316.7 7.2 0.2