我有一个文件的function名称和可变数目的用户名如下:
优点1
USER1
用户2
特点2
用户3
我想能够将用户名移动到function名称相同的行(沿vijoin命令行)。 function名称以大写字母开头,用户名以小写字母开头。 有没有办法做到这一点?
sed很简单:
sed ':a;N;$!ba;s/\n\+\([az]\)/ \1/g;'
小描述它是如何工作的:
:a;N;$!ba; 将所有行添加到匹配模式。 我们需要它来删除下一步中的所有换行符。 s/\n\+\([az]\)/ \1/g; 将在user*之前删除所有换行符并在Feature*之前保存换行符。 顺便说一句,这也可以做到
tr '\n' ' ' | sed 's/ \([AZ]\)/\n\1/g' $ cat test_file Feature1 user1 user2 Feature2 user3 Feature2 user3 user3 ouser3 user3 $ sed ':a;N;$!ba;s/\n\+\([az]\)/ \1/g;' test_file Feature1 user1 user2 Feature2 user3 Feature2 user3 user3 ouser3 user3
AWK非常简单:
awk '/^[[:upper:]]/ {if (line) {print line}; line = $0} /^[[:lower:]]/ {line = line " " $0} END {if (line) {print line}}'
写入数据之前,您需要将数据分块。 就像下面的伪代码一样(你需要自己把它变成适当的BASH语法)。
out_line="" for in_line in $(cat $file); do if $(echo in_line | egrep ^Feature) != "" echo $out_line >> $out_file out_line="$in_line" else out_line="$out_line $in_line" fi done echo $out_line >> $out_file