<>
인덱스 카운터의 현재 값 (처음에는 0)으로 바꾸고 카운터를 증가시키기 전에 찾지 못한 문자열 을 찾은 경우 내부의 문자열을 검색하는 bash 스크립트가 필요합니다 . 내부 <>
에서 이미 알고 있는 문자열을 찾으면 해당 문자열 의 색인을 찾아 색인으로 대체해야합니다. 이는 여러 파일에 걸쳐 수행되어야합니다. 즉, 프로그램 시작시에만 여러 파일에서 패턴을 검색 할 때 카운터가 재설정되지 않습니다.
file_a.txt :
<abc>
<b>
<c>
<c>
<abc>
file_b.txt :
<c>
<b>
될 것
file_a.txt :
0
1
2
2
0
file_b.txt :
2
1
지금까지 얻은 것 :
names=()
for file in folder/*.txt
do
name=$(sed 's/\<[a-zA-Z]*\> /\1 /' file)
for i in "${names[@]}"
do
if [ "$i" -eq "$name" ]
then
#replace string with index of string in array
else
names+=("$name")
fi
done
done
편집 : 문제를 단순화하기 위해 언급하지 않은 것은 교체해야하는 패턴이 파일 내부의 유일한 텍스트가 아니라는 것입니다. 즉, 파일이 다음과 같이 보입니다.
file_a.txt :
123abc<abc>xyz
efg
<b>ah
a<c>
<c>b
c<abc>
file_b.txt :
xyz<c>xyz
xyz<b>xyz
될 것
file_a.txt :
123abc0xyz
efg
1ah
a2
2b
c0
file_b.txt :
xyz2xyz
xyz1xyz
파일이 상당히 클 수 있으므로 복사해서는 안되며 편집 만하면됩니다. 이 작업은 폴더 내의 모든 파일과 하위 폴더의 파일에 대해 수행해야합니다.
이 awk 스크립트를 시도해 볼 수 있습니다.
mkdir -p tmp
awk 'match($0, /<[^>]+>/) {
k = substr($0, RSTART, RLENGTH)
if (!(k in freq))
freq[k] = n++
$0 = substr($0, 1, RSTART-1) freq[k] substr($0, RSTART+RLENGTH)
}
{
print $0 > ("tmp/" FILENAME)
}' file_{a,b}.txt
수정 된 파일은 tmp/
디렉토리에 저장되며 내용을 검토 한 후 다시 이동할 수 있습니다.
cat tmp/file_a.txt
123abc0xyz
efg
1ah
a2
2b
c0
cat tmp/file_b.txt
xyz2xyz
xyz1xyz
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다