unix中使用awk、sed基于分隔符的连接行
我想把以a结尾的行和下一行连接起来 例如: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
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我认为这是一个有效的问题,即使海报上没有任何作品。我认为这是一个有效的问题,即使海报上没有任何作品。