![xargs 출력의 수직 정렬](https://linux55.com/image/143384/xargs%20%EC%B6%9C%EB%A0%A5%EC%9D%98%20%EC%88%98%EC%A7%81%20%EC%A0%95%EB%A0%AC.png)
여러 하위 디렉터리에 있는 파일에서 특정 값을 추출하고 싶습니다. 이 작업을 수행하는 작업 코드가 있습니다.
for i in */; do grep "free energy" "$i"filename | tail -1 | xargs -I{} echo "$i: {}" >> output.txt; done
이 tail -1
명령은 각 파일(원하는 것)의 마지막 출력을 제공하고 xargs 구성은 폴더 이름 앞에 폴더 이름을 추가하므로 어떤 라인이 어떤 시스템에 속하는지 알 수 있습니다. 출력 .txt는 다음과 같습니다.
Cr/: free energy TOTEN = -18.87487583 eV Hf/: free energy TOTEN = -18.76845679 eV N/: free energy TOTEN = -15.90748159 eV Nb/: free energy TOTEN = -20.38801759 eV Ti/: free energy TOTEN = -14.92233353 eV TiN/: free energy TOTEN = -78.73147048 eV
그 중 Cr
, 등은 Hf
폴더 이름입니다. 내 문제는 폴더의 문자 길이가 다르기 때문에 오른쪽의 값이 올바르게 정렬되지 않는다는 것입니다. 폴더 이름을 변경할 수 없으므로 수직 정렬이 정확하도록 xargs 명령이 항상 특정 수(예: 10)의 공백(최소한 최소)을 사용하도록 하고 싶습니다. 결과는 다음과 같아야 합니다.N
TiN
Cr/ : free energy TOTEN = -18.87487583 eV Hf/ : free energy TOTEN = -18.76845679 eV N/ : free energy TOTEN = -15.90748159 eV Nb/ : free energy TOTEN = -20.38801759 eV Ti/ : free energy TOTEN = -14.92233353 eV TiN/: free energy TOTEN = -78.73147048 eV
아니면 이거
Cr /: free energy TOTEN = -18.87487583 eV Hf /: free energy TOTEN = -18.76845679 eV N /: free energy TOTEN = -15.90748159 eV Nb /: free energy TOTEN = -20.38801759 eV Ti /: free energy TOTEN = -14.92233353 eV TiN/: free energy TOTEN = -78.73147048 eV
이렇게 하면 Alt
+를 사용하여 모든 값을 한 번에 쉽게 복사할 수 있습니다 Leftclick
.
답변1
printf
그냥 당신이 원하는 것
xargs -I{} printf "%-10s: %s\n" "$i" "{}"
이는 쉘의 내장 printf가 아닌 /usr/bin/printf를 사용한다는 점에 유의하십시오.