Bash 将行拆分为多行,并在开头附加一个子字符串
我是bash的新手,我有这样一个日志:Bash 将行拆分为多行,并在开头附加一个子字符串,bash,shell,sed,command-line,Bash,Shell,Sed,Command Line,我是bash的新手,我有这样一个日志: 10, "a@gmail.com" 2, "b@gmail.com" 3333, "c@hotmail.com", "d@gmail.com" 4, "e@hotmail.com", "f@hotmail.com", "g@gmail.com" 55, "h@gmail.com" 我希望是: 10, "a@gmail.com" 2, "b@gmail.com" 3333, "c@hotmail.com" 3333, "d@gmail.com" 4, "e
10, "a@gmail.com"
2, "b@gmail.com"
3333, "c@hotmail.com", "d@gmail.com"
4, "e@hotmail.com", "f@hotmail.com", "g@gmail.com"
55, "h@gmail.com"
我希望是:
10, "a@gmail.com"
2, "b@gmail.com"
3333, "c@hotmail.com"
3333, "d@gmail.com"
4, "e@hotmail.com"
4, "f@hotmail.com"
4, "g@gmail.com"
55, "h@gmail.com"
如何在bash中执行此操作?作为第一个参数,我将传递文件的路径。 如果不传递任何参数,我将说明错误并以(-1)退出 我正在迭代文件,逗号改为空格。 每一次迭代我都会用空格单词隔开。如果这个单词是数字,我将存储它并转到下一个单词。如果不是数字,我将打印上一个数字和当前单词,用逗号分隔。在for循环之前,我正在用0初始化数字,以防万一;)
运行:
用于操作文本的标准UNIX工具是awk:
$ awk 'BEGIN{FS=OFS=", "} {for (i=2;i<=NF;i++) print $1, $i}' file
10, "a@gmail.com"
2, "b@gmail.com"
3333, "c@hotmail.com"
3333, "d@gmail.com"
4, "e@hotmail.com"
4, "f@hotmail.com"
4, "g@gmail.com"
55, "h@gmail.com"
$awk'BEGIN{FS=OFS=“,”}{for(i=2;i到目前为止您尝试了什么?编辑您的Q以显示(您认为是什么)您解决问题的最佳尝试。我们是来帮助您的,但不是为您做的;-)。祝您好运。
test@LAPTOP-EQKIVD8A:~$ cat new.txt
10, "a@gmail.com"
2, "b@gmail.com"
3333, "c@hotmail.com", "d@gmail.com"
4, "e@hotmail.com", "f@hotmail.com", "g@gmail.com"
55, "h@gmail.com"
test@LAPTOP-EQKIVD8A:~$ ./script.sh new.txt
Parsing file "new.txt":
10, "a@gmail.com"
2, "b@gmail.com"
3333, "c@hotmail.com"
3333, "d@gmail.com"
4, "e@hotmail.com"
4, "f@hotmail.com"
4, "g@gmail.com"
55, "h@gmail.com"
$ awk 'BEGIN{FS=OFS=", "} {for (i=2;i<=NF;i++) print $1, $i}' file
10, "a@gmail.com"
2, "b@gmail.com"
3333, "c@hotmail.com"
3333, "d@gmail.com"
4, "e@hotmail.com"
4, "f@hotmail.com"
4, "g@gmail.com"
55, "h@gmail.com"