파일 이름 목록이 포함된 파일에서 "_"를 ","로 바꾸십시오.

파일 이름 목록이 포함된 파일에서 "_"를 ","로 바꾸십시오.


누군가가 다음 요구 사항을 충족하는 쉘 스크립트를 작성하는 데 도움을 줄 수 있다면 도움이 될 것입니다.

다음과 같은 파일 이름 목록이 포함된 텍스트 파일이 있습니다.

ADB_AR_2006_07.pdf
ADBL_AR_2010_11.pdf
CBL_AR_2013_14.pdf
CZBIL_AR_2007_08.pdf
BOKL_AR_2015_16.pdf
..
..

이제 텍스트 파일에 나열된 모든 파일 이름에서 첫 번째와 두 번째 "_"를 ","로 바꾸고 싶습니다. 그러면 파일 이름은 다음과 같습니다.

ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
..
..

답변1

당신은 간단하게 사용할 수 있습니다sed표현하다:

sed -Ei 's/^([^_]+)_([^_]+)_/\1,\2,/' file

file수정된 내용:

ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf

  • i- 내부 파일 수정 허용

  • -E- 확장 정규식 허용


단순화된 접근 방식은 다음과 같습니다.

sed -i 's/_/,/; s/_/,/' file

답변2

간단한 Python 스크립트

#!/usr/bin/env python
from __future__ import print_function
import sys
with open(sys.argv[1]) as f:
    for line in f:
        tokens=line.strip().split('_')
        print(",".join(tokens[0:3]),'_',tokens[3],sep='')

핵심 아이디어는 파일을 한 줄씩 읽고, 구분 기호로 여러 부분으로 나누고, _슬라이스 표기법을 사용하여 처음 3개 항목을 문자열로 연결한다는 것입니다. 이 출력을 파일에 저장해야 하는 경우 쉘 연산자를 사용하여 출력을 파일로 보내십시오._[0:3]>

시험:

$ ./edit_lines.py input.txt                                                                                                                                                             
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf

답변3

해결책 awk:

$ awk -F"_" '{ print $1","$2","$3"_"$4}' list 
ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf

관련 정보