Linux shell awk怎么去除行内,重复列?

===关键词.txt===芒硝-化工生产,硫化钠-化工生产建筑史-研究-中国-近代-文集,建筑物-保护-中国-近代-文集高等学校-课程改革-湖北省-文集,高等学校-课程建... ===关键词.txt===

芒硝-化工生产,硫化钠-化工生产

建筑史-研究-中国-近代-文集,建筑物-保护-中国-近代-文集

高等学校-课程改革-湖北省-文集,高等学校-课程建设-湖北省-文集

利用shell的相关命令,可以用awk,按照“-”“,”“ ”分隔一行关键词,去除行内重复关键词,得到
===去除重复后.txt===

芒硝,硫化钠,化工生产

建筑史,研究,中国,近代,文集,建筑物,保护

高等学校,课程改革,湖北省,文集,课程建设

提示:行内关键词顺序,不重要

谢谢。
展开
 我来答
百度网友5311d79
推荐于2016-09-17 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3211万
展开全部
awk -F"[-,]" '{for(i=1;i<=NF;i++)a[$i,NR]++}{for(j in a){split(j,b,SUBSEP);if(b[2]==NR)printf b[1]" "} printf "\n"}' 关键词.txt >去除重复后.txt

以此例测试通过。


关于awk二维数组的使用:

awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例如,array[2,4] = 1这样的访问是允许的。awk使用一个特殊的字符串SUBSEP (\034)作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2\0344。
类似一维数组的成员测试,多维数组可以使用 if ( (i,j) in array)这样的语法,但是下标必须放置在圆括号中。
类似一维数组的循环访问,多维数组使用 for ( item in array )这样的语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来访问单独的下标分量。split ( item, subscr, SUBSEP)。

更多追问追答
追问
执行结果,有乱码。
==========================

�工生产 �钠 硫� 芒硝 �
近代 保护 中国 文集 建筑史 建筑物 研究
高等学校 �省 湖� 文集 课程改革 课程建设
追答

你是windows上编辑的文件吧,要用awk,需要先用dos2unix转为unix格式。

我做测试时是在linux下直接用vim创建的《关键词.txt》文件。

dos2unix 关键词.txt

然后再用awk。

匿名用户
2014-12-03
展开全部
, いつか権を手に入れば、血のしぶき天下(爆ましょう犬だ。
追答
天降异象于前。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
微水文00
2014-12-03 · TA获得超过392个赞
知道大有可为答主
回答量:2597
采纳率:0%
帮助的人:1451万
展开全部
内行的概念还没听说过。
不过这个需求能开发出来的
可否私谈?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式