awk之前的场分离

时间:2015-10-06 12:21:45

标签: bash awk

我有以下形式的 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')有关。但是如何实现呢?

4 个答案:

答案 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

即使是外国人,

也能很好地运作。