将多行合并为一个(.cap 文件)CentOS
Join multiple lines into One (.cap file) CentOS
一个条目有多行。每个条目由两个空行分隔。
每个条目必须单独一行,后跟分隔符 (;)。
示例输入:
Name:Sid
ID:123
Name:Jai
ID:234
Name:Arun
ID:12
尝试用 cat test.cap | tr -s [:space:] ';'
替换空行
输出:
Name:Sid;ID:123;Name:Jai;ID:234;Name:Arun;ID:12;
预期输出:
Name:SidID:123;Name:JaiID:234;Name:ArunID:12;
Xargs
也是如此。
我也用过 sed
命令,但它只是将两行合二为一。我在一个文件中有 132 行作为一个条目和 1000 个这样的条目。
能否请您尝试以下。
awk 'NF{val=(val?[=10=]~/^ID/?val [=10=]";":val [=10=]:[=10=])} END{print val}' Input_file
输出如下。
Name:SidID:123;Name:JaiID:234;Name:ArunID:12;
说明:现在也添加上面代码的说明。
awk ' ##Starting awk program here.
NF{ ##Checking condition if a LINE is NOT NULL and having some value in it.
val=(val?[=12=]~/^ID/?val [=12=]";":val [=12=]:[=12=]) ##Creating a variable val here whose value is concatenating its own value along with check if a line starts with string ID then add a semi colon at last else no need to add it then.
}
END{ ##Starting END section of awk here.
print val ##Printing value of variable val here.
}
' Input_file ##Mentioning Input_file name here.
您可以使用
cat file | awk 'BEGIN { FS = "\n"; RS = "\n\n"; ORS=";" } { gsub(/\n/, "", [=10=]); print }' | sed 's/;;*$//' > output.file
输出:
Name:SidID:123;Name:JaiID:234;Name:ArunID:12
备注:
FS = "\n"
会将字段分隔符设置为换行符`
RS = "\n\n"
会将您的记录分隔符设置为双换行符
gsub(/\n/, "", [=14=])
将从找到的记录中删除所有换行符
sed 's/;;*$//'
将删除 awk
添加的尾随 ;
这可能对你有用 (GNU sed):
sed -r '/./{N;s/\n//;H};$!d;x;s/.//;s/\n|$/;/g' file
如果不是空行,则追加以下行并去掉它们之间的换行符。将结果追加到 hold space,如果不是文件末尾,则删除当前行。在文件末尾,交换到保留 space,删除第一个字符(这将是一个换行符),然后用分号替换所有换行符(仅在最后一行附加一个额外的分号) .
一个条目有多行。每个条目由两个空行分隔。 每个条目必须单独一行,后跟分隔符 (;)。
示例输入:
Name:Sid
ID:123
Name:Jai
ID:234
Name:Arun
ID:12
尝试用 cat test.cap | tr -s [:space:] ';'
输出:
Name:Sid;ID:123;Name:Jai;ID:234;Name:Arun;ID:12;
预期输出:
Name:SidID:123;Name:JaiID:234;Name:ArunID:12;
Xargs
也是如此。
我也用过 sed
命令,但它只是将两行合二为一。我在一个文件中有 132 行作为一个条目和 1000 个这样的条目。
能否请您尝试以下。
awk 'NF{val=(val?[=10=]~/^ID/?val [=10=]";":val [=10=]:[=10=])} END{print val}' Input_file
输出如下。
Name:SidID:123;Name:JaiID:234;Name:ArunID:12;
说明:现在也添加上面代码的说明。
awk ' ##Starting awk program here.
NF{ ##Checking condition if a LINE is NOT NULL and having some value in it.
val=(val?[=12=]~/^ID/?val [=12=]";":val [=12=]:[=12=]) ##Creating a variable val here whose value is concatenating its own value along with check if a line starts with string ID then add a semi colon at last else no need to add it then.
}
END{ ##Starting END section of awk here.
print val ##Printing value of variable val here.
}
' Input_file ##Mentioning Input_file name here.
您可以使用
cat file | awk 'BEGIN { FS = "\n"; RS = "\n\n"; ORS=";" } { gsub(/\n/, "", [=10=]); print }' | sed 's/;;*$//' > output.file
输出:
Name:SidID:123;Name:JaiID:234;Name:ArunID:12
备注:
FS = "\n"
会将字段分隔符设置为换行符`RS = "\n\n"
会将您的记录分隔符设置为双换行符gsub(/\n/, "", [=14=])
将从找到的记录中删除所有换行符sed 's/;;*$//'
将删除awk
添加的尾随
;
这可能对你有用 (GNU sed):
sed -r '/./{N;s/\n//;H};$!d;x;s/.//;s/\n|$/;/g' file
如果不是空行,则追加以下行并去掉它们之间的换行符。将结果追加到 hold space,如果不是文件末尾,则删除当前行。在文件末尾,交换到保留 space,删除第一个字符(这将是一个换行符),然后用分号替换所有换行符(仅在最后一行附加一个额外的分号) .