我得到了一个像这样的输入:
ha lo
ha
ha lo
ha
ha
ha lo
如果第二行中不包含字符串“lo”,我如何将该行附加到最后一行。之后看起来应该是这样的
haha
hahaha
ha
我觉得这个很棘手。很高兴能用sed或awk做到这一点。
答案 0 :(得分:3)
awk '
$2 == "lo" {if (line) print line; line = ""}
{line = line $1}
END {print line}
' filename
这有点简单,但你得到一个领先的空白行
awk '$2 == "lo" {print ""} {printf("%s", $1)} END {print ""}'
答案 1 :(得分:3)
这是GNU sed的一种方法:
parse.sed
/ +lo/! H # Append to HS if / +lo/ doesn't match
/ +lo/ { # If it does match
s/ *lo// # remove it
x # put the rest in HS and contents of HS in PS
s/\n//g # Remove all newlines from PS
/./! t end # If PS empty jump to end
p # otherwise print
s/.*// # and empty it
}
$ { # If last line
x # swap PS/HS
s/\n//g # remove newlines
p # and print PS
}
: end
使用以下命令运行:
sed -nr -f parse.sed < infile
输出:
haha
hahaha
ha
答案 2 :(得分:0)
这是另一种方式
其中file.txt包含上述条目
i=0;IFS=$'\n'; for line in `cat file.txt`; do ((i++)); if [[ [$line =~ lo ]]; then if [ $i -eq 1 ];then ha=$(echo "$line"|awk '{print $1}'); echo -n $ha; else echo; ha=$(echo "$line"|awk '{print $1}'); echo -n $ha; fi else echo -n "$line"; fi done; echo
哈哈 哈哈哈 公顷