다음 데이터 파일이 있습니다.
recID# Attachment# Attachment#2. ...... Attachment #15
101 c:/a/b/c/d/fil1.txt c:/a/b/c/d/e/aaa.txt ...... c:/a/b/c/d/e/fff.txt
103 c:/a/b/c/d/abc.txt c:/a/b/c/d/e/bbb.txt ...... c:/a/b/c/d/e/ggg.txt
104 c:/a/b/c/d/e/efg.txt c:/a/b/c/d/e/ccc.txt ...... c:/a/b/c/d/e/hhh.txt
105 c:/a/b/c/mnop.txt c:/a/b/c/d/e/ddd.txt ...... c:/a/b/c/d/e/iii.txt
전체 디렉토리가 아닌 파일 이름만 캡처하고 싶습니다. 예상 출력보다 낮습니다.
rec ID# Attachment1# ttachment#2 ...... Attachment #15
101 fil1.txt aaa.txt ...... fff.txt
103 abc.txt bbb.txt ...... ggg.txt
104 efg.txt ccc.txt ...... hhh.txt
105 mnop.txt ddd.txt ...... iii.txt
또한 로컬 디렉토리 c:\a\b\c의 각 파일이 사용 가능한지 여부를 비교하고 싶습니다. 가능하다면 /Test 디렉토리를 생성하고 해당 디렉토리에서 사용 가능한 모든 파일을 이동하고 싶습니다.
예: 첨부 파일 1 열의 파일 이름은 fil1.txt입니다. 이 디렉토리 "c:\a\b\c"에서 파일을 사용할 수 있는 경우 "c:\a\b\c" 디렉토리에서 " c:\a\b\d".
감사해요
답변1
사용할 수 있는 모든 파일 이름에서 디렉터리 부분을 제거하려면
sed 's#[^ \t]*/##g' inputfile > outputfile
또는
awk '{gsub(/[^ \t]*\//,"",$0);print}' inputfile > outputfile
질문의 샘플 입력 파일에서 다음 출력을 얻습니다.
recID# Attachment# Attachment#2. ...... Attachment #15
101 fil1.txt aaa.txt ...... fff.txt
103 abc.txt bbb.txt ...... ggg.txt
104 efg.txt ccc.txt ...... hhh.txt
105 mnop.txt ddd.txt ...... iii.txt
출력 형식이 중요한 경우 질문에 어떤 요구 사항이 있는지 지정하십시오.
파일을 확인할 디렉터리나 파일을 이동할 위치가 입력 파일과 어떻게 관련되어 있는지 질문에서 명확하지 않기 때문에 질문의 다른 부분에 대답할 수 없습니다.
편집하다:
\
실제 입력에 슬래시( ) 대신 백슬래시( ) 가 포함된 경우 /
다음 수정된 명령을 [/\\]
대신 사용 /
하거나 \/
두 입력 변형 모두에서 작동하도록 만듭니다.
sed 's#[^ \t]*[/\\]##g' inputfile > outputfile
awk '{gsub(/[^ \t]*[/\\]/,"",$0);print}' inputfile > outputfile