Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将行拆分为多行,并在开头附加一个子字符串_Bash_Shell_Sed_Command Line - Fatal编程技术网

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

我是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@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"