将多行连接成一个(.cap 文件)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 个这样的条目。

您可以使用

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

如果它不是空行,请附加以下行并删除它们之间的换行符。将结果追加到保留空间,如果不是文件的末尾,请删除当前行。在文件末尾,交换到保留空间,删除第一个字符(这将是换行符(,然后用分号替换所有换行符(仅为最后一行附加一个额外的分号(。

最新更新