와일드카드를 사용한 붙여넣기 및 대괄호 확장

와일드카드를 사용한 붙여넣기 및 대괄호 확장

중괄호 확장이 및 를 사용한 와일드카드 조합과 다르게 동작하는 이유는 무엇입니까 paste?

예: 각각 동일한 구조의 tsv를 포함하는 여러 폴더가 있고 각 폴더의 라인 5를 포함하는 "all.tsv"를 생성한다고 가정해 보겠습니다. 이 두 명령은 다르게 동작합니다.

paste -d, <(cut -d$'\t' -f5 {test,test1,test2}/example.tsv) > all.tsv

그리고

paste -d, <(cut -d$'\t' -f5 test*/example.tsv) > all.tsv

첫 번째는 예상대로 3개의 열이 있는 tsv를 생성하고, 두 번째는 서로 아래에 값이 있는 단일 열 tsv를 생성합니다.

내 문제는 폴더 목록이 임의로 크고 길며 연속적이지 않을 수 있다는 것입니다.

bash 스크립트로 이동하고 폴더를 반복하지 않고도 중괄호 확장을 위해 와일드카드를 사용하는 것과 동일한 동작을 달성할 수 있는 방법이 있습니까?

GNU 배시 사용

답변1

찾고 있는 동작은 bash-3.2(macOS 버전)와 bash-4.0 사이에서 수정된 버그입니다. ~에서파일 변경:

rr. 이제 중괄호 확장을 통해 프로세스 대체를 변경 없이 통과할 수 있습니다.

한 줄의 코드에 대해 awk를 시도해 볼 수 있습니다.

awk -F '\t' {FNR != NR {exit} {out=$5; for (i = 2; i < ARGC; i++) {getline < ARGV[i]; out = out "," $5}; print out}' test*/example.tsv

설명하다:

FNR != NR { exit }                # Exit after first file is finished.

{
  out=$5;                         # save the first file's fifth field
  for (i = 2; i < ARGC; i++) {    # loop over the remaining arguments (filenames).
    getline < ARGV[i];            # Read in the next line from i-th file.
    out = out "," $5              # save fifth field of the line just read
  };
  print out                       # print saved columns.
}

관련 정보