두 개의 서로 다른 확장자로 끝나는 두 개의 파일 목록이 있고 이를 루프에서 쌍으로 연결하고 싶습니다. 파일 이름은 다음과 같습니다.
이것들은 파일이에요
a.ID, b.ID, c.ID, d.ID
a.value, b.value, c.value, d.value
직관적으로 나는 이렇게 할 것이다:
for i in *.ID;
do
for j in *.value;
do
cat $i $j > $i.txt ; done
done
문제는 내가 a.ID
와 병합하여 a.value
무작위 로 병합하고 싶다는 것입니다. 등과 같이 .. b.ID
b.value
a.value
b.ID
어떤 아이디어가 있나요? 미리 감사드립니다
입력 샘플 a.ID
(예:):
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
예는 a.value
다음으로 끝납니다.
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0
chr1_901_1201 0 0
chr1_1201_1501 0 0
산출:
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0
chr1_901_1201 0 0
chr1_1201_1501 0 0
답변1
두 개의 루프가 필요하지 않습니다. 루프, through 등이 a
필요 합니다. 이와 같이:b
c
for i in *.ID; do
b=${i%%.ID}
cat "$i" "$b".value >"$b".txt
done
답변2
이렇게 할 수 있기 때문에 여기에 find
+ bash
방법이 있습니다.
$ ls
a.ID a.value
$ find -type f -iname "*.ID" -exec bash -c 'base=$(basename -s ".ID" "$@");cat "$@" "$base".value > "$base".merged' sh "{}" \;
$ ls
a.ID a.merged a.value
$ cat a.merged
chr1_237301_237601 176 1
chr1_237601_237901 176 1
chr1_237901_238201 176 1
chr1_1_301 0 0
chr1_301_601 0 0
chr1_601_901 0 0