각각 수천 개의 파일이 들어 있는 두 개의 폴더가 있습니다. 작년의 한 폴더에는 각 파일에 문자와 연도 접두어(a2020abc123.txt)가 있고, 올해의 동일한 파일은 동일한 형식의 다른 폴더(a2021abc123.txt)에 있습니다. 작년과 올해 사이에 크게 다른 파일을 찾으려면 이 두 폴더를 비교해야 합니다. 우리 팀은 항상 이런 일을 해요손으로그래서 저는 더 빠르고 오류가 덜 발생하는 방법을 원합니다.
예를 들어:
/folder1/a2021fileA123.txt 50kb
/folder2/a2022fileA123.txt 80kb
/folder1/a2021fileA124.txt 79kb
/folder2/a2022fileA124.txt 80kb
/folder1/a2021fileA125.txt 90kb
/folder2/a2022fileA125.txt 80kb
이상적으로는 다음과 같은 내용이 반환됩니다.
/folder1/a2021fileA123.txt 50kb
/folder2/a2022fileA123.txt 80kb
/folder1/a2021fileA125.txt 90kb
/folder2/a2022fileA125.txt 80kb
/folder1/a2021fileA124.txt 79kb
/folder2/a2022fileA124.txt 80kb
위와 같이 파일 쌍을 함께 그룹화해야 하는데 이는 내가 수행 방법을 알고 있는 기본 정렬에서 겪고 있는 문제입니다. 나는 awk와 같은 도구를 사용하는 것이 매우 익숙하지 않으며 우리 팀은 powershell을 선호합니다. 매우 감사합니다. 나는 그 후 몇 주 동안 꿈에서 이 파일 이름을 보게 되었습니다.
답변1
이것으로 무엇을 하고 싶은지 잘 모르겠습니다. 최소한 시작점은 다음과 같습니다. 이렇게 하면 폴더에 있는 파일을 찾아 인쇄할 수 있으며 앞에 크기(바이트)가 붙습니다.
find folder1 folder2 -type f -printf '%s %P\n'
예를 들어(질문의 목록을 수동으로 편집하면 됩니다):
50000 a2021fileA123.txt
80000 a2022fileA123.txt
79000 a2021fileA124.txt
80000 a2022fileA124.txt
90000 a2021fileA125.txt
80000 a2022fileA125.txt
이제 이 awk 명령에 파이프하면 2022 버전 파일과 2021 버전 파일 간의 크기 차이가 출력됩니다.
$ cat tst.awk
{
size = $1
year = substr($2,2,4)
base = substr($2,6)
bases[base]
map[base,year] = size
}
END {
for ( base in bases ) {
print base, map[base,2022] - map[base,2021]
}
}
$ find folder1 folder2 -type f -printf '%s %P\n' | awk -f tst.awk
fileA125.txt -10000
fileA123.txt 30000
fileA124.txt 1000
sort
크기 차이에 따라 출력을 정렬하려면 다음을 파이프하십시오 .
$ find folder1 folder2 -type f -printf '%s %P\n' | awk -f tst.awk | sort -k2,2rn
fileA123.txt 30000
fileA124.txt 1000
fileA125.txt -10000
도움이 되길 바랍니다.
답변2
당신은해야합니다diff
#!/bin/sh
cd folder1
for f in *
do
diff $f ../folder2/$f
done