unix中使用awk、sed基于分隔符的连接行

unix中使用awk、sed基于分隔符的连接行,unix,awk,sed,Unix,Awk,Sed,我想把以a结尾的行和下一行连接起来 例如: abcd| ef 123456| 78| 90 期望输出: abcdef 1234567890 你可以试试这个 你可以试试这个 救命啊!以下脚本将在管道字符和换行符出现时删除它们 $ awk '{c=sub(/\|/,"")?"":"\n"; $1=$1; printf "%s%s",$0,c}' file abcdef 1234567890 救命啊!以下脚本将在管道字符和换行符出现时删除它们 $ awk '{c=su

我想把以a结尾的行和下一行连接起来

例如:

abcd|  
ef  
123456|   
78|  
90  
期望输出:

abcdef  
1234567890 
你可以试试这个

你可以试试这个

救命啊!以下脚本将在管道字符和换行符出现时删除它们

$ awk '{c=sub(/\|/,"")?"":"\n"; $1=$1; printf "%s%s",$0,c}' file
abcdef
1234567890
救命啊!以下脚本将在管道字符和换行符出现时删除它们

$ awk '{c=sub(/\|/,"")?"":"\n"; $1=$1; printf "%s%s",$0,c}' file
abcdef
1234567890
使用GNU时:

$ sed ':a;/| *$/{N;ba};s/| *\n//g' infile
abcdef  
1234567890 
这样做的目的如下:

:a          # Label to branch to
/| *$/{     # If the line ends with a pipe and optional spaces
    N       # Append next line to pattern space
    ba      # Branch to label
}
s/| *\n//g  # Remove all pipes followed by optional spaces and a newline
要在BSD sed下工作,必须在标签和分支命令之后拆分命令:

sed -e ':a' -e '/| *$/{N;ba' -e '};s/| *\n//g' infile
使用GNU时:

$ sed ':a;/| *$/{N;ba};s/| *\n//g' infile
abcdef  
1234567890 
这样做的目的如下:

:a          # Label to branch to
/| *$/{     # If the line ends with a pipe and optional spaces
    N       # Append next line to pattern space
    ba      # Branch to label
}
s/| *\n//g  # Remove all pipes followed by optional spaces and a newline
要在BSD sed下工作,必须在标签和分支命令之后拆分命令:

sed -e ':a' -e '/| *$/{N;ba' -e '};s/| *\n//g' infile

这可能适用于GNU sed:

sed ':a;N;s/|\s*\n//;ta;P;D' file

这可能适用于GNU sed:

sed ':a;N;s/|\s*\n//;ta;P;D' file

使用GNU awk进行多字符RS:

$ awk -v RS='[|]\\s*\\n' -v ORS= '1' file
abcdef
1234567890
对于其他AWK,一种方法是:

$ awk 'sub(/\|[[:blank:]]*$/,"") {s = s $0; next} {print s $0; s=""}' file
abcdef
1234567890

如果您的最后一行输入可以以|结尾,您需要告诉我们如何处理该问题,并在您的问题中添加示例输入/输出,包括该案例。

使用GNU awk for multi char RS:

$ awk -v RS='[|]\\s*\\n' -v ORS= '1' file
abcdef
1234567890
对于其他AWK,一种方法是:

$ awk 'sub(/\|[[:blank:]]*$/,"") {s = s $0; next} {print s $0; s=""}' file
abcdef
1234567890
如果您的最后一行输入可以以|结尾,您需要告诉我们如何处理该问题,并在您的问题中添加示例输入/输出,包括该案例。

我从这个开始

awk -F '|' 'NF>1 {printf "%s", $1} NF==1' file
但后来我认为这对你可能有多少字段做了太多的假设。所以我最终得到了

awk -F '|' '{if (NF>1 && $NF ~ /^[[:blank:]]*$/) {NF--; printf "%s", $0} else print}' file
它更坚固,但不那么简洁。

我从这个开始

awk -F '|' 'NF>1 {printf "%s", $1} NF==1' file
但后来我认为这对你可能有多少字段做了太多的假设。所以我最终得到了

awk -F '|' '{if (NF>1 && $NF ~ /^[[:blank:]]*$/) {NF--; printf "%s", $0} else print}' file

它更坚固,但不那么简洁。

考虑到输入文本存储在文件名infle中

您可以使用此GNU sed命令:
sed':开始;$!Ns/\n/;s/\s//g;s///g'infle

考虑到输入文本存储在文件名infle中

您可以使用此GNU sed命令:
sed':开始;$!Ns/\n/;s/\s//g;s///g'infle

我认为这是一个有效的问题,即使海报上没有任何作品。我认为这是一个有效的问题,即使海报上没有任何作品。