我希望使用 sed 或 awk 等 UNIX 工具根据多个文本文件中的行号交换或转置行对(例如,交换第 10 行和第 15 行的位置)。
例如,我相信这个 sed 命令应该在单个文件中交换第 14 行和第 26 行:
sed -n '14p' infile_name > outfile_name
sed -n '26p' infile_name >> outfile_name
如何扩展它以处理多个文件?欢迎任何单行解决方案。
如果你想编辑一个文件,你可以使用ed
,标准编辑器。你的任务相当简单ed
:
printf '%s\n' 14m26 26-m14- w q | ed -s file
它是如何工作的?
-
14m26
tells ed
将第 #14 行移到第 #26 行之后
-
26-m14-
tells ed
获取第 #26 行之前的行(这是您原来的第 #26 行)并将其移到第 #14 行之前的行之后(这是您的第 #14 行原来所在的位置)
-
w
tells ed
写入文件
-
q
tells ed
退出。
如果您的数字位于变量中,您可以执行以下操作:
linea=14
lineb=26
{
printf '%dm%d\n' "$linea" "$lineb"
printf '%d-m%d-\n' "$lineb" "$linea"
printf '%s\n' w q
} | ed -s file
或类似的东西。确保linea<lineb
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)