使用sed/awk/sort按公司名称字母排序时,如何保留test.txt整行内容?
按公司名称排序并保留完整行内容的解决方案
我来帮你解决这个问题~你之前的命令之所以只输出公司名,是因为用awk只提取了$1(公司名部分),所以最后只能看到排序后的公司名。要保留完整行内容,我们需要让sort基于公司名来排序,但同时保留整行信息,这里有两个实用的方案:
方案1:直接用sort指定排序字段
假设你的test.txt中行的格式类似1. 公司名称(其他信息),可以先通过sed去掉开头的序号,再用sort以(为分隔符,按第一个字段(公司名称)排序,同时保留整行:
sed 's/^[0-9]*[.] //' test.txt | sort -t'(' -k1,1
sed 's/^[0-9]*[.] //':去掉每行开头的数字、点号和后面的空格,得到公司名称(其他信息)格式的行sort -t'(' -k1,1:用(作为字段分隔符,仅按第一个字段(也就是公司名称)进行排序,排序后输出完整的行内容
方案2:用awk添加排序前缀后再处理
如果你的行格式有更多变化(比如公司名和(之间有空格),可以用awk先给每行加上公司名作为排序前缀,排序后再去掉前缀:
sed 's/^[0-9]*[.] //' test.txt | awk -F'(' '{print $1 ":::" $0}' | sort | awk -F':::' '{print $2}'
awk -F'(' '{print $1 ":::" $0}':用(分割行,把公司名($1)和整行内容用:::拼接(:::是一个不会出现在你的内容里的分隔符,可按需替换)sort:按前缀的公司名称排序awk -F':::' '{print $2}':去掉前面的公司名前缀,输出原始的完整行
这两个方案都能帮你得到按公司名称字母序排列的完整行内容~
内容的提问来源于stack exchange,提问作者Rashad
相关产品推荐
相关产品推荐

