我有一个看起来像这样的文件,格式应该是文件名后跟4个条目开始!.......
76669667-LD_TTFI9255.gz
!0c0901$
!02342e$
!0c0901$
!030c2a$
76669707-UN_TTFI5494.gz
!0c0901$
!030509$
76669731-IN_TTFI7570.gz
!0c0901$
!023633$
!0c0901$
!030e33$
我需要一个命令,它会找到文件名后面少于4个条目并添加一些空格的情况。
使用上面的示例新输出需要成为
76669667-LD_TTFI9255.gz
!0c0901$
!02342e$
!0c0901$
!030c2a$
76669707-UN_TTFI5494.gz
!0c0901$
!030509$
!?
!?
76669731-IN_TTFI7570.gz
!0c0901$
!023633$
!0c0901$
!030e33$
由于
答案 0 :(得分:1)
假设你很乐意使用的不仅仅是sed,awk或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
}'
答案 1 :(得分:1)
awk 'BEGIN {counter = 4}
/^!/ {counter++; print}
/^[^!]/ { for(i = counter; i<4; i++) print "!?"; print; counter=0; }
END { for(i = counter; i<4; i++) print "!?"; }'
答案 2 :(得分:1)
纯粹的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