unlink(1)
намеренно упрощенный вариант rm(1)
.
Я не уверен, почему это было создано, но это, вероятно вследствие того, что под капотом, rm(1)
реализован с точки зрения unlink(2)
системный вызов. Поэтому я принимаю причину unlink(1)
должен предоставить более прямой путь системному вызову. Кто-то, несомненно, придумал вариант использования где rm(1)
сделал неправильную вещь и решил, что лучший способ зафиксировать ее состоял в том, чтобы обеспечить этот прямой путь.
Это попыталось бы соответствовать с начала:
t=TMP_ABC_SEQ_NUM
for n in $(seq 0 ${#t})
do
grep ${t:n} dictionary.txt && break
done
Это ищет самую длинную последовательность, неважно, где она запускается:
for len in $(seq ${#t} -1 3)
do
for start in $(seq 0 $((${#t}-len)))
do
grep ${t:start:len} dictionary.txt && break 2
done
done
требование: подобная удару оболочка, доступная здесь: собственные win32 порты многих GNU-utils, как sh.exe, grep, sed, awk, до н.э, кошка, tac, версия, седло, сокращение...
Возможный подход, для сокращения строки от главы, пока это не соответствует:
#!/bin/sh
string="TMP_ABQ_SEQ_NUM"
while ! grep "$string" dictionary.txt; do
# remove the shortest leading string ending with "_"
string="${string#*_}"
done
grep
, но на доступности оболочки POSIX. Это, конечно, доступно через Cygwin.
– enzotib
02.04.2012, 17:30
Вы могли инвертировать способ, которым Вы смотрите на это? Вместо поиска TMP_ABQ_SEQ_NUM
в dictionary.txt
, разве Вы не могли искать первое поле для каждой строки в dictionary.txt
(ABQ_SEQ_NUM) в исходном файле?
Если это верно, следующее должно работать
#!/bin/bash
for i in $(awk '{print $1}' dictionary.txt) do
grep $i $1
done
Передайте вышеупомянутый сценарий название файла, который Вы хотите проверить на последовательности, существующие в dictionary.txt. Извинения, если это не то, что Вы хотели.