gpt4 book ai didi

linux - 用于合并行的 bash 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:30 25 4
gpt4 key购买 nike

我需要合并文本文件中数字之间的多行。每当遇到数字时,都应在文件中创建一个新行。

当前模式:sample2.txt

1 sham  
ganesh
suresh ram
23 sam prabhu
alex
jenny
deb

要求的模式:

1 sham , ganesh, suresh ram 
23 sam prabhu , alex , jenny , deb

我想出了下面的脚本

#!/bin/bash
filename='sample2.txt'
echo Start
while read p; do
var=`echo $p | awk '{print $1}' | egrep '^[0-9]+$'`
if [ $? -eq 0 ]; then
echo $p >> file
else
#capture something here and append to the line
fi
done < $filename

最佳答案

使用 GNU sed:

sed -n '/^[0-9]/!{/./H;z;x;s/\n/, /};x;/./p;${g;/./p}' inputfile

解释:

  • /^[0-9]/!{ - 仅在不以数字开头的行上执行接下来的 4 个命令
  • /./H - 如果模式空间(保存当前行)不为空,则将其附加到保存空间(由 \n 分隔)<
  • z - 清除模式空间
  • x - 交换模式空间和保持空间(导致空保持空间)
  • s/\n/,/ - 用逗号替换分隔符 \n
  • - block 结束;将在每一行上执行要遵循的命令
  • x - 交换模式空间和保持空间
  • /./p - 如果模式空间不为空,打印它
  • ${ - 仅在文件的最后行执行剩余的命令
  • g - 将保持空间复制到模式空间
  • /./p - 如果模式空间不为空,打印它

示例输入:

1 sham
ganesh
suresh ram
23 sam prabhu
alex
jenny
deb

输出:

1 sham, ganesh, suresh ram
23 sam prabhu, alex, jenny, deb

关于linux - 用于合并行的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47115267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com