美文网首页Linux学习之路Linux我用 Linux
【Shell笔记>实用】根据一个文本列索引提取另一个文本列

【Shell笔记>实用】根据一个文本列索引提取另一个文本列

作者: 王诗翔 | 来源:发表于2018-06-08 11:47 被阅读39次
文本内容

今天微信群有朋友讨论这样一个问题,怎么根据上图中所示的2.txt第一列作为索引,提取1.txt中对应的列。

简单使用join命令显然不能完成这样一个任务,但是我们仔细观察文本1可以发现如果将它转置就符合join的基本条件了,这时候只需要到网上找别人写好的进行行列互换的脚本就可以了,并不需要自己费心费心进行循环计算。

$ awk '{for(i=0;++i<=NF;)a[i]=a[i]?a[i] FS $i:$i}END{for(i=0;i++<NF;)print a[i]}' \
   1.txt | join - 2.txt | \
   awk '{for(i=0;++i<=NF;)a[i]=a[i]?a[i] FS $i:$i}END{for(i=0;i++<NF;)print a[i]}'  

操作就是先转置,然后使用join粘贴,然后再转置回来。

相关文章

网友评论

  • helloKimmy:没错吧?++i会导致同一语句赋值号两侧i取值不同,但后面的语句的取值应该都是赋值号右侧i的取值。好像有点头疼。推荐你参加“混乱的C”讨论,我觉得你已经够资格了。:smile::smile::smile:
  • taoyan:效率真高
    王诗翔:@taoyan 我也经常搜自己简书,哈哈
    taoyan:@王诗翔 是的,知识点很容易忘,我现在很多时候都得去我博客查找!
    王诗翔:@taoyan 感觉有意思就写写😁 好记性不如烂笔头

本文标题:【Shell笔记>实用】根据一个文本列索引提取另一个文本列

本文链接:https://www.haomeiwen.com/subject/dcoosftx.html