我有以下形式的 file1 和 file2 :
file1
æææøø (xxxx yyyy)
ðý??? (xx yyy zzzz)
harbour
file2
information1
information2
information3
我希望在一个文件中组合并输出逗号分隔值(csv):
desired output:
æææøø (xxxx yyyy),information1
ðý??? (xx yyy zzzz),information2
harbour,information3
但是,我使用pr -m -t -s\ file1 file2 | awk '{print $1","$2}' > out
的脚本给了我这个输出:
wrong output:
æææøø,(xxxx
ðý???,(xx
harbour,information3
猜测所需的输出与在读取文件之前设置字段分隔(类似于FS='\n'
)有关。但是如何实现呢?
答案 0 :(得分:5)
使用paste
可能更简单,例如,
paste -d',' file1 file2
此处,-d
选项指定所需的分隔符。
答案 1 :(得分:3)
我无法想象为什么它失败了,因为解决方案是粘贴:
$ paste -d, file1 file2
æææøø (xxxx yyyy),information1
ðý??? (xx yyy zzzz),information2
harbour,information3
但是如果你不能让它为你工作那么试试这个:
$ awk 'NR==FNR{a[NR]=$0;next} {print a[FNR]","$0}' file1 file2
æææøø (xxxx yyyy),information1
ðý??? (xx yyy zzzz),information2
harbour,information3
答案 2 :(得分:0)
这是一个版本:
pr --sep-string="|" -J -m -t -s\ file1 file2 | awk -F "|" '{print $1 "," $2}'
结果:
æææøø (xxxx yyyy),information1
ðý??? (xx yyy zzzz),information2
harbour,information3
答案 3 :(得分:0)
问题已解决。我发现如果在paste
变量中进行了更改,LC_CTYPE
命令实际上可以正常工作。我的locale
个变量原来是:
$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
但是LC_CTYPE="UTF-8"
导致脚本在paste
上失败。但是,如果改为" C"该脚本运行得非常好:
$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
根据这一变化,
$ paste -d, file1 file2
也能很好地运作。