简单文本文件修改的UNIX脚本



我有一个看起来像这样的文件,格式应为文件名,然后是4个条目开始!.......

76669667-LD_TTFI9255.gz
!0c0901$
!02342e$
!0c0901$
!030c2a$
76669707-UN_TTFI5494.gz
!0c0901$
!030509$
76669731-IN_TTFI7570.gz
!0c0901$
!023633$
!0c0901$
!030e33$

我需要一个commmand,可以在文件名之后找到少于4个条目并添加一些空白。

使用上面的示例新输出需要成为

76669667-LD_TTFI9255.gz
!0c0901$
!02342e$
!0c0901$
!030c2a$
76669707-UN_TTFI5494.gz
!0c0901$
!030509$
!?
!?
76669731-IN_TTFI7570.gz
!0c0901$
!023633$
!0c0901$
!030e33$

谢谢

假设您很乐意使用不仅仅是SED,尴尬或bash ...

以下perl脚本将有能力:

cat input.txt | perl -pe '
    if (/^!/) {
        --$n
    } else {
        print "!?n" x $n if $n > 0
        $n = 4
    }
    END {
        print "!?n" x $n if $n > 0
    }'
awk 'BEGIN {counter = 4}
     /^!/ {counter++; print}
     /^[^!]/ { for(i = counter; i<4; i++) print "!?"; print; counter=0; }
     END { for(i = counter; i<4; i++) print "!?"; }'

纯bash解决方案。没有其他答案中的代码重复:)

#!/bin/bash
count=0
while read line
do
  if [[ ! "$line" =~ ^! ]]
  then
      for((;count>0;count--))
      do
        echo "!?"
      done
      count=4
  else
      ((count--))
  fi
  echo "$line"
done < file

相关内容

  • 没有找到相关文章

最新更新