파일 이름의 숫자를 기준으로 특정 순서로 cat 파일을 정렬합니다.

파일 이름의 숫자를 기준으로 특정 순서로 cat 파일을 정렬합니다.

file.88_0.pdb, file.88_1.pdb, ..., 라는 파일이 있습니다 file.88_100.pdb. 뒤에, 뒤에 붙여넣기 cat를 원합니다 . file.88_1.pdb이렇게 하면 파일이 다음 순서로 정리됩니다. 순서대로 조합하려면 어떻게 해야 하나요?file.88_0.pdbfile.88_2.pdbfile.88_1.pdbcat file.88_*.pdb > all.pdb0 1 10 11 12 13 14 15 16 17 18 19 2 20...0 1 2 3 4 5 6...

답변1

사용brace expansion

cat file.88_{0..100}.pdb >>bigfile.pdb

파일이 존재하지 않는다는 오류 메시지 인쇄를 무시하려면 다음을 사용하십시오.

cat file.88_{0..100}.pdb >>bigfile.pdb 2>/dev/null

zsh셸 에서는 (n)globbing 한정자를 사용하여 요청할 수도 있습니다.수치정렬(기본값알파벳순으로) 글로벌의 경우:

cat file.88_*.pdb(n) >>bigfile.pdb 2>/dev/null

답변2

중괄호 확장이 없는 셸에서 파일 이름에 공백, 따옴표 또는 백슬래시가 포함되어 있지 않으면 ls(GNU 구현 가정) +를 사용할 수 있습니다 xargs.

ls -v file.88_*.pdb | xargs cat > all.pdb

ls파일은 번호순으로 정렬됩니다.

-v 텍스트에서 (버전) 번호의 자연스러운 순서입니다.

답변3

cat $(for((i=0;i<101;i++)); do echo -n "file.88_${i}.pdb "; done)

또는 Jesse_b의 의견과 관련하여:

cat $(for((i=0;i<101;i++)); do test -f "file.88_${i}.pdb" && echo -n "file.88_${i}.pdb "; done)

답변4

노력하다:

filedir="/path/to/files"
output="/path/to/all.pdb"
for file in $(find $filedir -type f -name "file.88_*" | sort -t "_" -k2 -n); do
    cat $file >> $output
done

이렇게 하면 sort( ) 두 번째 필드를 구분 기호 -k2로 사용할 수 있습니다. _여기를 사용해야 합니다 >>. 그렇지 않으면 각각의 새 파일이 이전 파일을 덮어쓰게 됩니다.

관련 정보