파일 텍스트를 파일 이름과 병합

파일 텍스트를 파일 이름과 병합

두 개의 텍스트 파일이 있습니다. 첫 번째 "file1.txt"의 내용은 다음과 같습니다.

Apple
Orange
Banana

두 번째 파일 "file2.txt"의 내용은 다음과 같습니다.

monday
tuesday
wednesday

나는 그것들을 하나의 파일로 결합하고 싶습니다. 그 결과는 다음과 같습니다:

Apple       File1.txt
Orange      File1.txt
Banana      File1.txt
monday      File2.txt
tuesday     File2.txt
wednesday   File2.txt

답변1

이는 매우 사소한 일입니다 awk.

$ awk '{print $0,FILENAME}' File*.txt
Apple File1.txt
Orange File1.txt
Banana File1.txt
monday File2.txt
tuesday File2.txt
wednesday File2.txt

입력 줄과 파일 이름 사이에 공백 대신 탭을 원하는 경우 -v OFS='\t'명령줄에 추가하여 OFS(출력 필드 구분 기호)를 설정하세요.

awk -v OFS='\t' '{print $0,FILENAME}' File*.txt

또는 다음을 사용하십시오:

awk '{print $0 "\t" FILENAME}' File*.txt

파일 이름에 =문자가 없다고 가정합니다. 파일 이름에 문자가 포함되어 있지 않다고 보장할 수 없는 경우 =다음과 같이 변경할 수 있습니다.

awk '{print $0 "\t" substr(FILENAME, 3)}' ./File*.txt

적어도 GNU에서는 파일 이름에 유효한 문자를 형성하지 않는 바이트가 포함된 경우 경고가 표시되지만 ( (사용awk로케일을CLC_ALL=C awk...

답변2

그리고 perl:

perl -lpe '$_ .= "\t$ARGV"' File*.txt

File*.txt(그러나 다음과 같은 글로브를 사용하면 트릭을 수행할 수 있습니다.다른 것은 위험할 수 있다).

답변3

명령줄에서 대화형으로 사용하기 위한 가장 간단한 입력 중 하나는 다음과 같습니다.

grep . File*.txt

정규식은 .모든 문자와 일치하므로 모든 파일의 비어 있지 않은 모든 줄이 일치되고 파일 이름이 접두사로 인쇄됩니다.

특정 커널 설정 확인(파일당 하나의 설정이 저장됨)과 같은 사용 사례에 적합합니다.

$ grep . /sys/kernel/mm/transparent_hugepage/*
/sys/kernel/mm/transparent_hugepage/defrag:[always] defer defer+madvise madvise never
/sys/kernel/mm/transparent_hugepage/enabled:[always] madvise never
/sys/kernel/mm/transparent_hugepage/hpage_pmd_size:2097152
grep: /sys/kernel/mm/transparent_hugepage/khugepaged: Is a directory
/sys/kernel/mm/transparent_hugepage/shmem_enabled:always [within_size] advise never deny force
/sys/kernel/mm/transparent_hugepage/use_zero_page:1

관련 정보