shell sed查找具有序列号的行,并将它们排序复制到新文件

tkqqtvp1  于 12个月前  发布在  Shell
关注(0)|答案(3)|浏览(122)

我需要整理一些文件内容。文件内容如下所示

...
description of file
http://linktofile/33.txt
description of file
http://linktofile/11.txt
description of file
http://linktofile/22.doc
...

现在,我想剪切条目,并将它们按正确的顺序粘贴到一个新文件中,

description of file
http://linktofile/11.txt
description of file
http://linktofile/22.doc
description of file
http://linktofile/33.txt
...

有没有可能让sed用link查找该行中的数字,然后将整行剪切成一个顺序正确的新文件,并带有相应的上述文件描述?

c6ubokkw

c6ubokkw1#

假设你的输入中没有标签,你可以这样做:

<infile paste - - | sort -t $'\t' -k2,2V | tr '\t' '\n'

输出量:

description of file
http://linktofile/11.txt
description of file
http://linktofile/22.doc
description of file
http://linktofile/33.txt
tjrkku2a

tjrkku2a2#

使用惯用的decorate-sort-undecorate:

$ awk -F'[/.]' -v OFS='\t' 'NR%2{desc=$0; next} {print $(NF-1), NR-1, desc ORS $(NF-1), NR, $0}' file |
    sort -k1,2n | cut -f3-
description of file
http://linktofile/11.txt
description of file
http://linktofile/22.doc
description of file
http://linktofile/33.txt
4bbkushb

4bbkushb3#

好吧,伙计们,谢谢你们的想法。我自己找到了解决办法,想和你分享。它可能更像是一个变通和繁琐,但最终做我想做的。
第一步:删除所有的新行,并将其替换为一些指标,使每2行变成1行

sed -i 'N;s/\n/ ## /' file

第2步:在每个链接中插入一个用于排序的指示符

sed -i 's/recurringpart\//recurringpart\/~/g' file

步骤3:使用sort来整理混乱。

sort -t~ -k2 -g -r -o file file

第四步:将“换行符指示符”替换为换行符,这样每一行又被分成两行

sed -i 's/ ## /\n/g' file

步骤5:删除排序指示符

sed -i 's/recurringpart\/~/recurringpart\//g' file

相关问题