0

10 レコードのみを含む未加工のテキスト ファイルがあります。

1|word01
2|word02
3|word03
4|word04
5|word05
6|word06
7|word07
8|word08
9|word09
10|word10

明らかに存在しない新しいレコード「word11」を追加すると、そのレコードは最上位に留まり、すべての行が再インデックスされます。ファイルには 10 レコードしか保存できないため、最後のレコードが削除されます。出力は次のようになります。

1|word11
2|word01
3|word02
4|word03
5|word04
6|word05
7|word06
8|word07
9|word08
10|word09

すでに存在する新しいレコードを追加する場合は、先頭に並べてすべて再インデックスする必要があります。

1|word04
2|word11
3|word01
4|word02
5|word03
6|word05
7|word06
8|word07
9|word08
10|word09

この操作をスクリプトに実装するにはどうすればよいですか? どんなヒントや助けも本当に感謝しています。ありがとう。

4

2 に答える 2

0
#!/bin/bash
# command usage: cmd FILENAME NEWWORD
sed -i -e 's/[0-9]\+|\(.\+\)/\1/g' -e "/$2/d" $1
echo $2 > $1.tmp
cat $1 >> $1.tmp
nl -s '|' $1.tmp | head -10 | tr -d '[:blank:]' > $1
于 2013-01-31T03:30:26.060 に答える
0
#!/bin/sh

usage ()
{
  echo usage: $0 RECORD FILE
  exit
}

[ $2 ] || usage
record=1
# print new record
echo "$record|$1" > k

# print other records
while IFS='|' read index value
do
  if [ ${value%$1} ]
  then
    (( record++ ))
    echo "$record|$value" >> k
  fi
done < "$2"

# trim to 10
head k > "$2"
rm k
于 2013-01-31T03:01:57.373 に答える