xargs 출력의 수직 정렬

xargs 출력의 수직 정렬

여러 하위 디렉터리에 있는 파일에서 특정 값을 추출하고 싶습니다. 이 작업을 수행하는 작업 코드가 있습니다.

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)의 공백(최소한 최소)을 사용하도록 하고 싶습니다. 결과는 다음과 같아야 합니다.NTiN

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를 사용한다는 점에 유의하십시오.

관련 정보