다음과 같은 파일이 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