다음 줄에서 파일의 출력을 생성합니다.

다음 줄에서 파일의 출력을 생성합니다.

다음과 같은 파일이 3개 있습니다.abc.txt, def.txt 및 xyz.txt. 쉘 스크립트를 생성했으며 이 3개 파일의 내용을 아래와 같이 한 줄씩 표시하고 싶습니다.

abc ---- 1  2  3  4  5  6  7
def ---- 3  5  7  9 11 13 15
xyz ---- 4  8 12 16 20 24 28

파일의 내용도 다음과 같아야 하며 각 값은 병렬로 표시되어야 합니다. 쉘 스크립트 생성을 도와주실 수 있나요? 하지만 실제로 스크립트를 실행하면 다음과 같이 표시됩니다.

abc ---- 1 2 3 4 5 6 7
def ---- 3 5 7 9 11 13 15
xyz ---- 4 8 12 16 20 24 28

그래서 위와 같이 출력 내용을 정리하고 싶습니다. 내 스크립트에서 사용하는 위치는 위의 요구 사항을 충족합니다.

 for f in abc.txt def.txt xyz.txt; do (cat "${f}"; echo) >> output.txt; done
|awk '{printf "%-10s|%-10s|%-10s|%-10s|%-10s|%-10s|%-10s\n",$1,$2,$3,$4,$5,$6,$7} output.txt > final_output.txt

스크립트를 생성하는 것이 좋은 접근 방식입니까?

답변1

열 명령을 사용할 수 있습니다

./your_script |  column -t -s' ' 

이는 원하는 출력에 가깝지만 숫자가 오른쪽 정렬되지 않습니다.

abc  ----  1  2  3   4   5   6   7
def  ----  3  5  7   9   11  13  15
xyz  ----  4  8  12  16  20  24  28

숫자를 오른쪽으로 정렬하려면 다음과 같이 쉘 스크립트의 출력을 rev 및 columns 명령으로 파이프하십시오.

./your_script | rev | column -t -s' '  | rev
  • 첫 번째는 rev각 행을 뒤집습니다.
  • 그런 다음 columns 명령은 공백을 구분 기호로 사용하여 열을 생성합니다.
  • 마지막으로 마지막 항목은 rev원래 행을 복원하여 오른쪽 정렬된 숫자를 제공합니다.

답변2

@amisax의 답변을 사용하고 중복성을 제거하려면 스크립트를 다시 작성해야 한다고 생각합니다. 다음은 원하는 작업을 수행해야 합니다.

#!/bin/bash

for f in abc.txt def.txt xyz.txt
do
    echo "$f --- " "$(cat $f)" >> ct_output.txt
done

column -t -s' ' ct_output.txt

그러면 각 줄에 입력 파일의 이름과 그 내용이 포함된 임시 파일이 생성됩니다(가정).내용은 딱 한줄임) column@amisax가 설명한 대로 파일을 파이프합니다. 이는 필요한 것을 생성해야합니다

user@host $ ./columnize.sh
abc.txt  ---  1  2  3   4   5   6   7
def.txt  ---  3  5  7   9   11  13  15
xyz.txt  ---  4  8  12  16  20  24  28

관련 정보