예를 들어 새로운 파트너 ID가 1234 인 경우 grep과 관련이 있어야합니다. 예를 들어, 기존 행과 12340 및 12348이 일치하므로 포함되지 않습니다.
파일 정렬은 아마도 awk 및/또는 sed와 같은 bash 이외의 도구를 사용하는 것이 더 좋습니다.
partnerid1:some text
line1 for partnerid1
line2 for partnerid1
line3 for partnerid1
line4 for partnerid1
partnerid2:some other text
line1 for partnerid2
line2 for partnerid2
line3 for partnerid2
line4 for partnerid4
주문한 위 파일 가정하면, 다음을 수행 할 수 있습니다 :
당신의 파일이 partnerid1가 partnerid2 이하가되도록 형식의 주문에 있으며 관련 각 행이 나타납니다
#!/bin/bash
partnerid=`head -1 $1 | cut -f1 -d:`
partnerrows=`wc -l $1 | awk '{print $1}'`
# find insert point
FN=text.txt
NEWFN=new.text.txt
Linenumber=`cat $FN | awk -v partnerid=$partnerid -v partnerdata=$1 -v rowcount=$partnerrows '
BEGIN {
partnerid = partnerid + 0
INRANGE=0
inserthere=0
}
/^[0-9]+:/ {
sub(/\:.*/,"")
id = $0 + 0
if (partnerid == id) {
inserthere = -1
exit
}
# if not in range, check if it is now
if (INRANGE == 0) {
if (partnerid > id) {
INRANGE = 1
inserthere = NR + rowcount - 1
}
}
# if in range and this id now less, then have our location
if (INRANGE == 1) {
inserthere = NR + rowcount - 1
if (partnerid < id) {
inserthere = NR -1
exit
}
}
}
END {
print inserthere
}
'`
FNLEN=`wc -l $FN | awk '{print $1}'`
rm -f $NEWFN
touch $NEWFN
if [ $Linenumber -gt 0 ]; then
cat $FN | sed -n "1,${Linenumber}p" >> $NEWFN
fi
if [ $Linenumber -ge 0 ]; then
cat $1 >> $NEWFN
fi
if [ $Linenumber -ge 0 -a $Linenumber -le $FNLEN ]; then
Linenumber=$((Linenumber + 1))
cat $FN | sed -n "${Linenumber},\$p" >> $NEWFN
fi
사이트 노트 : 영어와 독일어 변수 이름을 섞어도보기 싫지만. – hek2mgl