使用 awk 打印记录中的第一个字段和(且仅)匹配字段
我真的不知道 awk 是否适合该任务......也许 python 中的东西会更好。无论如何,我想先在这里询问任务的可行性。我们开始:
数据:
###offspr84 175177 200172 312312 310326 338342 252240 226210 113129 223264
男28 197175 172200 308312 310338 262338 256252 190226 113129 223219
女13 197177 172172 312308 318326 342350 240248 210218 129113 267247
offspr85 181177 192160 320312 290362 358330 238238 214178 133129 263223
男65 197181 176192 320268 322286 358330 238244 206214 137133 267263
Female17 181177 160172 280312 362346 350326 230238 126178 129129 223167
所以基本上我需要打印第一个字段($1)并在第一条记录中匹配(粗体)$9,并在第二条记录中匹配$2和$6。
输出文件:
offspr84 113129
男28 113129
offspr85 181177
女17 181177
offspr85 358330
male65 358330
有什么关于我如何实现这一目标的提示吗?
谢谢!
I really don't know if awk would be the appropriate tool for that task... Maybe something in python would be better. Anyway, I thought asking here first for the feasibility of the task. Here we go :
Datas :
###
offspr84 175177 200172 312312 310326 338342 252240 226210 113129 223264
male28 197175 172200 308312 310338 262338 256252 190226 113129 223219
female13 197177 172172 312308 318326 342350 240248 210218 129113 267247
###
offspr85 181177 192160 320312 290362 358330 238238 214178 133129 263223
male65 197181 176192 320268 322286 358330 238244 206214 137133 267263
female17 181177 160172 280312 362346 350326 230238 126178 129129 223167
###
So basicaly I need to print the first field ($1) and matching (in bold) $9 in the first record and matching $2 and $6 in second record.
Output file :
offspr84 113129
male28 113129
offspr85 181177
female17 181177
offspr85 358330
male65 358330
Any hint on how I could accomplish that ?
Thanx !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
该代码将产生您想要的输出。也许不是最好的方法,但似乎按预期工作。
更新:
使用嵌套列表同时包含两个列表:
This code will produce the output you want. Maybe not the best way, but seems to work as expected.
Update:
With a nested list to include both list at once:
我不完全确定您希望匹配如何进行。但假设相同的模式应用于所有字段,您可以通过循环字段轻松地做到这一点,例如
I'm not entirely sure on how you want the matching to work. but assuming the same pattern is applied to all fields, you can easily do this by looping over the fields e.g
试试这个 awk 代码
try this awk code