【发布时间】:2021-03-05 00:57:43
【问题描述】:
文件 1 有制表符分隔的内容:
09/11/1983 so and so <bob@bob.com> content of my imp. msg
09/12/1983 yo yo yoooo <politics@me.com> content of my imp. msg
文件 2 有空格分隔的内容:
bob@bob.com 7155
politics@me.com 2666
我正在使用以下 awk 命令创建一个新文件,该文件将文件 2 中每一行的数字添加为文件 1 中每一行末尾的新制表符分隔数据。
awk 'BEGIN {ORS="\t"} {getline f1 <"c:\\file1.tsv" ; print f1 $2}' < "c:\\file2.tsv" > "c:\\file3.tsv"
但是,输出将数字添加为新行,如下所示:
09/11/1983 so and so <bob@bob.com> content of my imp. msg
7155
09/12/1983 yo yo yoooo <politics@me.com> content of my imp. msg
2666
我已阅读有关 awk ORS 并尝试了许多建议解决方案的组合,但无法使输出看起来像这样:
09/11/1983 so and so <bob@bob.com> content of my imp. msg 7155
09/12/1983 yo yo yoooo <politics@me.com> content of my imp. msg 2666
提前感谢您在解决方案方面的任何帮助。
【问题讨论】:
-
您使用的是 Windows 还是 Unix?如果您在 Windows 上,那么我很惊讶在脚本周围使用单引号可以正常工作,但如果您在 Unix 上,那么我很惊讶使用
c:\\...引用文件可以正常工作。 -
如果是 windows 文件,请尝试
dos2unix file1 file2并重新运行。否则getline f1 <"c:\\file1.tsv" ; sub("/n","",f1);print f1 $2}'可能会有所帮助。抱歉,没时间测试。祝你好运。 -
我在 Windows10 上,但使用 cygwin64 作为模拟器。我运行了
awk '{getline f1 <"c:\\file1.tsv" ; sub("/n","",f1) ; print f1 $2}' < "c:\\file2.tsv" > "c:\\file3,但输出继续将文件 2 中的数字添加为文件 3 中的新行。感谢您的指导。 -
先对原始数据文件运行dos2unix命令,再运行awk命令即可解决问题!啊,谢谢!
-
Arg,昨晚深夜输入了我的建议。在没有
sub()..的情况下尝试它,因为它应该是sub("\n","",f1),但是一旦你完成了dos2unix,它可能并不重要。祝你好运。
标签: awk concatenation getline