merge1
별도의 파일( , ) 로 병합해야 하는 파일 목록(아래 참조)이 있습니다 merge2
. , 을 merge1
포함 합니다 .file1a_1
file1a_2
merge2
file2a_1
file2a_2
나는 노력했다
find . -name "file*_*" -exec cat {} \; >> mergefile*
즉, 파일:
file1a_1
X1a_2
file1a_3
file1b_1
file1b_2
file1b_3
쉘 스크립트는 모든 파일을 병합된 파일에 저장하고 개별적으로 분리하지 않습니다.
어떤 도움이라도 대단히 감사하겠습니다.
답변1
만약에파일은 모두 현재 디렉터리에 있으며 가능한 최대 병합 수(아래 예에서는 100)를 통해 루프를 하드코딩할 수 있습니다.
shopt -s nullglob
for((index=1;index<100;index++))
do
inputs=( "file${index}"*_* )
if [ "${#inputs[@]}" -gt 0 ]
then
cat -- "${inputs[@]}" > "merge${index}"
fi
done
답변2
어쩌면 다음과 같은 것일 수도 있습니다.
find . -name 'file[0-9]*_*' -type f -exec awk '
FNR == 1 {
output = FILENAME
sub(/.*\/file/, "", output)
sub(/[^0-9].*/, "", output)
output = "merge" output
}
{print > output}' {} +
파일 은 find
불특정 순서로 발견되므로 불특정 순서로 파일이 병합됩니다.
특정 파일의 모든 파일이 merge
비어 있으면 merge
파일이 생성되지 않습니다. merge
이러한 경우 빈 파일을 원 하고 awk
GNU 파일이 있는 경우 위의 내용을 다음과 같이 변경할 수 있습니다.
find . -name 'file[0-9]*_*' -type f -exec gawk '
BEGINFILE {
output = FILENAME
sub(/.*\/file/, "", output)
sub(/[^0-9].*/, "", output)
output = "merge" output
printf "" > output
}
{print > output}' {} +