请使用sed或者gwak或者grep帮我写一个脚本存在文本a 一共有两列以空格分隔实现 第一列相同的就把第二列的内容追加到第一列的后面仍然以空格分割并且删除这一行脚本执行前123 qwe123 adc234 qsd234 qaz245 wer脚本执行后123 qwe adc234 qsd qaz245 wer
使用sed实现:
sed ':a;N;$!ba;s/\n/ /g;s/\([^\s]*\)\s\([^\n]*\)\s*\1.*/\1 \2/g' a.txt > b.txt
解释:
:a;N;$!ba:将整个文件读入到模式空间中,同时用标签a来标记,以便后续处理。s/\n/ /g:将所有换行符替换为空格,将多行合并成一行。s/\([^\s]*\)\s\([^\n]*\)\s*\1.*/\1 \2/g:匹配第一列相同的行,将第二列的内容追加到第一列的后面,并删除这一行。a.txt > b.txt:将结果保存到b.txt文件中。
使用awk实现:
awk '{a[$1]=a[$1]" "$2}END{for(i in a) print i,a[i]}' a.txt > b.txt
解释:
{a[$1]=a[$1]" "$2}:将第一列作为数组a的索引,将第二列的内容追加到数组元素中。END{for(i in a) print i,a[i]}:在所有行处理完后,遍历数组a,输出结果。a.txt > b.txt:将结果保存到b.txt文件中。
使用grep实现:
grep -oP '^\S+\s\K.*$' a.txt | awk '{a[$1]=a[$1]" "$2}END{for(i in a) print i,a[i]}' > b.txt
解释:
grep -oP '^\S+\s\K.*$' a.txt:使用grep提取第二列的内容。awk '{a[$1]=a[$1]" "$2}END{for(i in a) print i,a[i]}':与awk实现相同。> b.txt:将结果保存到b.txt文件中
原文地址: https://www.cveoy.top/t/topic/dxW9 著作权归作者所有。请勿转载和采集!