awk - 在新行中打印文件每列之前的第 1 列
问题描述
我有一个 1000 到 2000 列和 3000 多行的数据文件。
输入示例数据
GO:0009987 Os760 Os840 Os550 Os380 Os590 Os340
GO:0043170 Os610 Os043 Os035
预期输出:
GO:0009987 Os760
GO:0009987 Os840
GO:0009987 Os550
GO:0009987 Os380
GO:0009987 Os590
GO:0009987 Os340
GO:0043170 Os610
GO:0043170 Os043
GO:0043170 Os035
我试过这个:
sed 's/ /\n/2; P; D' filename | awk 'NF==2 {a =$1;b=$2; print; next} {print a,$0}'
但这给了我这样的结果。(with one extra GO value in column 1)
. 我想从文件中删除这个额外的 GO。
GO:0009987 Os760
GO:0009987 Os840
GO:0009987 Os550
GO:0009987 Os380
GO:0009987 Os590
GO:0009987 Os340
GO:0009987
GO:0043170 Os610
GO:0043170 Os043
GO:0043170 Os035
GO:0043170
解决方案
您能否尝试以下操作(根据 Sundeep 先生的评论更改分隔选择)。
awk '{for(i=2;i<=NF;i++){print $1,$i}}' Input_file
或尝试:
awk 'BEGIN{FS=":| +"} {for(i=3;i<=NF;i++){print $1":"$2,$i}}' Input_file
或者:
awk -F':| +' '{for(i=3;i<=NF;i++){print $1":"$2,$i}}' Input_file
推荐阅读
- installation - 运行 Anaconda3 安装 bash 脚本失败
- selenium - 使用 xPath (Selenium, Python) 找到 Tweet 'like' 按钮
- angular - Angular Forms - 如何通过其 ID 编辑(修补)现有记录
- docker - 项目包括多个 Dockerfile 和共享一些文件的应用程序。如何构建它?
- java - 我在为 DAO 中的具体查询制作 AsynchTask 时遇到问题
- node.js - Node.js 应用程序 - 单个目录中的多个服务
- excel - 如何在 VBA 中的多列 ListBox 中的文件夹中填充多个文件的文件名和修改日期?
- python - Convert multipule HTML to CSV file quickly in Python
- c++ - 这是在 C++ 中定义结构的全局实例的好方法吗?
- video - 无法播放解密的 .ts 文件