将某些行移动到前一行

时间:2012-04-27 10:01:38

标签: bash formatting

我有一个如下所示的列表:

sharename:shareX
comment:commentX
sharename:shareY
comment:commentY
sharename:shareZ
comment:commentZ

依旧......

这就是我希望列表看起来像:

shareX;commentX
shareY;commentY
shareZ;commentZ

我怎样才能在bash中实现这一目标?

4 个答案:

答案 0 :(得分:2)

Pure Bash:

IFS=':'
while read a b; read c d; do   # read 2 lines
  echo -e "$b:$d"
done < "$infile"

答案 1 :(得分:1)

一个班轮:

odd=0; for i in `cat list | cut -d":" -f2`; do if [ $odd -eq 0 ]; then echo -ne $i; odd=1; else echo $i; odd=0; fi; done

格式化:

odd=0; 
for i in `cat list | cut -d":" -f2`; 
do 
    if [ $odd -eq 0 ]; 
    then 
        echo -ne $i";"; 
        odd=1; 
    else 
        echo $i; 
        odd=0; 
    fi; 
done

答案 2 :(得分:0)

未经测试,sed部分可能是错误的

paste -d ';' - - < filename | sed -r 's/(^|;)[^:]:/\1/g'

答案 3 :(得分:0)

这可能对您有用:

sed '$!N;s/[^:]*:\([^\n]*\)\n[^:]*:/\1;/' file
shareX;commentX
shareY;commentY
shareZ;commentZ