awk替换序列化的数字行并向上移动其他行

awk替换序列化的数字行并向上移动其他行,awk,sed,Awk,Sed,我有一个文件的格式如下 1 - descrio #944 name address 2 - desanother #916 name address 3 - somedes #957 name address 我想得到的输出是 Usercode #944, name, address Usercode #916, name, address Usercode #957, name, address 如果您的描述中没有#,请尝试: sed -e 's/.*#/Usercode #/;N;

我有一个文件的格式如下

1 - descrio #944
name
address
2 - desanother #916 
name
address
3 - somedes #957 
name
address
我想得到的输出是

Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address 
如果您的描述中没有
#
,请尝试:

sed -e 's/.*#/Usercode #/;N;N;s/\n/, /g' input
如果您的描述中没有
#
,请尝试:

sed -e 's/.*#/Usercode #/;N;N;s/\n/, /g' input
如果您的描述中没有
#
,请尝试:

sed -e 's/.*#/Usercode #/;N;N;s/\n/, /g' input
如果您的描述中没有
#
,请尝试:

sed -e 's/.*#/Usercode #/;N;N;s/\n/, /g' input
使用
awk

awk 'NR%3 == 1{sub(/^.*#/, "Usercode #")};{ORS=NR%3?", ":"\n"};1' file
Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address
对于可变行数

awk -v RS='(^|\n)[[:digit:]]+[[:blank:]]*-[[:blank:]]*' '{sub(/\n$/, "");
gsub(/\n/, ", "); printf "%s", $0""RT}END{print ""}' file
使用
awk

awk 'NR%3 == 1{sub(/^.*#/, "Usercode #")};{ORS=NR%3?", ":"\n"};1' file
Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address
对于可变行数

awk -v RS='(^|\n)[[:digit:]]+[[:blank:]]*-[[:blank:]]*' '{sub(/\n$/, "");
gsub(/\n/, ", "); printf "%s", $0""RT}END{print ""}' file
使用
awk

awk 'NR%3 == 1{sub(/^.*#/, "Usercode #")};{ORS=NR%3?", ":"\n"};1' file
Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address
对于可变行数

awk -v RS='(^|\n)[[:digit:]]+[[:blank:]]*-[[:blank:]]*' '{sub(/\n$/, "");
gsub(/\n/, ", "); printf "%s", $0""RT}END{print ""}' file
使用
awk

awk 'NR%3 == 1{sub(/^.*#/, "Usercode #")};{ORS=NR%3?", ":"\n"};1' file
Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address
对于可变行数

awk -v RS='(^|\n)[[:digit:]]+[[:blank:]]*-[[:blank:]]*' '{sub(/\n$/, "");
gsub(/\n/, ", "); printf "%s", $0""RT}END{print ""}' file

你也可以试试这个命令

$ paste -d'~' - - - < ccc | sed 's/^[^#]*/Usercode /g;s/~/, /g'
Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address
$paste-d'~'-
您也可以尝试此命令

$ paste -d'~' - - - < ccc | sed 's/^[^#]*/Usercode /g;s/~/, /g'
Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address
$paste-d'~'-
您也可以尝试此命令

$ paste -d'~' - - - < ccc | sed 's/^[^#]*/Usercode /g;s/~/, /g'
Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address
$paste-d'~'-
您也可以尝试此命令

$ paste -d'~' - - - < ccc | sed 's/^[^#]*/Usercode /g;s/~/, /g'
Usercode #944, name, address
Usercode #916, name, address
Usercode #957, name, address
$paste-d'~'-

OP需要
后跟空格作为分隔符,而不是
本身,但这也会在名称和地址中为
添加空格,右逗号将被逗号和空格所取代。这取决于OP,但我不相信他要求在姓名和地址中添加逗号。我假设他的姓名或地址中没有~字符。OP需要
后跟空格作为分隔符,而不是
,但这将为
添加空格,
s在名称和地址中,右边的逗号将替换为逗号和空格。这取决于OP,但我不相信他要求修改名称和地址中的逗号。我假设他的名称或地址中没有~字符。OP需要
后跟空格作为分隔符,而不是
是它自己写的,但是这会在
中添加一个空格,在名称和地址中也会添加一个空格,右边的逗号会被逗号和空格替换。好吧,这取决于OP,但我不相信他要求在名称和地址中添加逗号。我假设他的姓名或地址中没有~字符。OP需要
后跟空格作为分隔符,而不是
本身,但这将在名称和地址中的
中添加空格,右逗号将替换为逗号和空格。这取决于OP,但我不相信他要求在姓名和地址中添加逗号。我假设他的姓名或地址中没有~字符。一些高尔夫
awk'NR%3==1{$0=“Usercode”$NF}{ORS=NR%3?”,“:RS}1'
谢谢1-CR。效果很好。但是,我不得不调整NR值,因为有些文件下一个记录有4或5行,而不是3行。可能是,如果RS设置为以Usercode开头的行,则我不必使用NR值,因为某些文件的NR组合为3、4或5行。如何进行更改?@user3616577,请参阅编辑的版本。请注意,新版本仅适用于GNU awkSome高尔夫
awk'NR%3==1{$0=“Usercode”$NF}{ORS=NR%3?”,“:RS}1'
谢谢1-CR。它工作得很好。但是,我不得不调整NR值,因为有些文件下一个记录有4或5行,而不是3行。可能是,如果RS设置为以Usercode开头的行,则我不必使用NR值,因为某些文件的NR组合为3、4或5行。如何进行更改?@user3616577,请参阅编辑的版本。请注意,新版本仅适用于GNU awkSome高尔夫
awk'NR%3==1{$0=“Usercode”$NF}{ORS=NR%3?”,“:RS}1'
谢谢1-CR。它工作得很好。但是,我不得不调整NR值,因为有些文件下一个记录有4或5行,而不是3行。可能是,如果RS设置为以Usercode开头的行,则我不必使用NR值,因为某些文件的NR组合为3、4或5行。如何进行更改?@user3616577,请参阅编辑的版本。请注意,新版本仅适用于GNU awkSome高尔夫
awk'NR%3==1{$0=“Usercode”$NF}{ORS=NR%3?”,“:RS}1'
谢谢1-CR。它工作得很好。但是,我不得不调整NR值,因为有些文件下一个记录有4或5行,而不是3行。可能是,如果RS设置为以Usercode开头的行,则我不必使用NR值,因为某些文件的NR组合为3、4或5行。如何进行更改?@user3616577,请参阅编辑的版本。请注意,新版本只适用于GNU awkThanks,谢谢大家。1-CR的回答很好。但是,我不得不调整NR值,因为有些文件下一个记录有4或5行,而不是3行。可能是,如果RS设置为以用户代码开头的行,那么我就不必使用NR值,因为有些文件的NR组合为3、4或5行。谢谢大家。1-CR的回答很好。但是,我不得不调整NR值,因为有些文件下一个记录有4或5行,而不是3行。可能是,如果RS设置为以用户代码开头的行,那么我就不必使用NR值,因为有些文件的NR组合为3、4或5行。谢谢大家。1-CR的回答很好。但是,我不得不调整NR值,因为有些文件下一个记录有4或5行,而不是3行。可能是,如果RS设置为以用户代码开头的行,那么我就不必使用NR值,因为有些文件的NR组合为3、4或5行。谢谢大家。1-CR的回答很好。然而,我不得不调整NR