单个条目有多行。每个条目由两个空行分隔。 每个条目必须成一行,后跟一个分隔符(;)。
示例输入:
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 个这样的条目。
您可以使用
cat file | awk 'BEGIN { FS = "n"; RS = "nn"; ORS=";" } { gsub(/n/, "", $0); print }' | sed 's/;;*$//' > output.file
输出:
Name:SidID:123;Name:JaiID:234;Name:ArunID:12
笔记:
FS = "n"
会将字段分隔符设置为换行符'RS = "nn"
会将记录分隔符设置为双换行符gsub(/n/, "", $0)
将从找到的记录中删除所有换行符sed 's/;;*$//'
将删除awk
添加的尾随;
观看在线演示
你能试试下面的吗?
awk 'NF{val=(val?$0~/^ID/?val $0";":val $0:$0)} 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?$0~/^ID/?val $0";":val $0:$0) ##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.
这可能对你有用(GNU sed(:
sed -r '/./{N;s/n//;H};$!d;x;s/.//;s/n|$/;/g' file
如果它不是空行,请附加以下行并删除它们之间的换行符。将结果追加到保留空间,如果不是文件的末尾,请删除当前行。在文件末尾,交换到保留空间,删除第一个字符(这将是换行符(,然后用分号替换所有换行符(仅为最后一行附加一个额外的分号(。