중괄호 확장이 및 를 사용한 와일드카드 조합과 다르게 동작하는 이유는 무엇입니까 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.
}