我有一个看起来像这样的文件,格式应为文件名,然后是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