두 개의 텍스트 파일이 있습니다. 첫 번째 "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
로케일을C
LC_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