Linux shell awk怎么去除行内,重复列?
===关键词.txt===芒硝-化工生产,硫化钠-化工生产建筑史-研究-中国-近代-文集,建筑物-保护-中国-近代-文集高等学校-课程改革-湖北省-文集,高等学校-课程建...
===关键词.txt===
芒硝-化工生产,硫化钠-化工生产
建筑史-研究-中国-近代-文集,建筑物-保护-中国-近代-文集
高等学校-课程改革-湖北省-文集,高等学校-课程建设-湖北省-文集
利用shell的相关命令,可以用awk,按照“-”“,”“ ”分隔一行关键词,去除行内重复关键词,得到
===去除重复后.txt===
芒硝,硫化钠,化工生产
建筑史,研究,中国,近代,文集,建筑物,保护
高等学校,课程改革,湖北省,文集,课程建设
提示:行内关键词顺序,不重要
谢谢。 展开
芒硝-化工生产,硫化钠-化工生产
建筑史-研究-中国-近代-文集,建筑物-保护-中国-近代-文集
高等学校-课程改革-湖北省-文集,高等学校-课程建设-湖北省-文集
利用shell的相关命令,可以用awk,按照“-”“,”“ ”分隔一行关键词,去除行内重复关键词,得到
===去除重复后.txt===
芒硝,硫化钠,化工生产
建筑史,研究,中国,近代,文集,建筑物,保护
高等学校,课程改革,湖北省,文集,课程建设
提示:行内关键词顺序,不重要
谢谢。 展开
3个回答
展开全部
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。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |