다른 두 출력 열 사이에 열을 삽입하는 방법은 무엇입니까?

다른 두 출력 열 사이에 열을 삽입하는 방법은 무엇입니까?

알아두세요이것그리고이것그러나 그들은 나를 도와주지 않았습니다.

두 명령의 출력을 병합하고 싶습니다.

ls -1sh

그리고

wc -l

그래서 나는 다음과 같이 할 수 있습니다 :

<combined command> o.img 1.img
  1512 412K 0.png
  1269 320K 1.png
  2781 732K total

또 다른 작은 문제는 ls가 크기의 합을 포함하지 않는다는 것입니다.

답변1

ls총계를 생성하지는 du않지만

du -sch *.csv
16K     LdevInfo.csv
8.0K    LunInfo.csv
4.0K    W.csv
4.0K    WwnInfo.csv
32K     total

wc총을 생산할 것입니다

 wc -l *.csv
  101 LdevInfo.csv
   66 LunInfo.csv
   62 W.csv
    8 WwnInfo.csv
  237 total

그리고 나서 간단히join

join -j 2 -o 1.1,2.1,2.2 v w
101 16K LdevInfo.csv
66 8.0K LunInfo.csv
62 4.0K W.csv
8 4.0K WwnInfo.csv
237 32K total

어디

  • -j 2일치를 위해 필드 2를 사용하도록 조인에게 지시
  • -o 1.1,2.1,2.2지정된 파일 FILENUM.FIELDNUM을 인쇄합니다.

또는 추가 awk를 사용하여 형식을 멋지게 지정할 수 있습니다.

join -j 2  v w| awk '{printf "%s\t%s\t%s\n",$2,$3,$1}'
101     16K     LdevInfo.csv
66      8.0K    LunInfo.csv
62      4.0K    W.csv
8       4.0K    WwnInfo.csv
237     32K     total

추신: 나는 *.png그것을 사용 하지 않았지만 *.csv이것이 작동할 것입니다.

답변2

먼저, 다음 함수를 사용하여 ls에 총계가 포함되지 않는 문제를 해결해야 합니다.

myls() {
    if [ $# -gt 1 ] ; then
        ls -1sh "$@"
        ls -1s "$@" | cut -d' ' -f1 | awk '{s+=$1} END {print s}' | numfmt --to=iec --suffix=' total'
    else
        ls -1sh "$1"
    fi
}

.bashrc본인이 직접 넣고 로드하시면 됩니다 .

그런 다음 출력을 병합해야 합니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 다음은 하나입니다. 먼저 모든 출력을 붙여넣기와 결합합니다. 안타깝게도 붙여넣기는 파일을 인수로만 허용하지만 명명된 파이프를 사용하여 이를 처리할 수 있습니다.

combined() {
    paste <(wc -l "$@") <(myls "$@") | awk '{print $1, $3, $4}' | sort
}

이 함수를 지금 넣을 수 있습니다 .bashrc. 스키마를 읽을 수 있다고 생각했기 때문에 정렬했습니다. | sort정렬을 원하지 않으면 삭제할 수 있습니다.

추가 기능을 사용하지 않으려면 다음과 같이 하세요.

myd() {
    if [ $# -gt 1 ] ; then
        tmp=`ls -1sh "$@";ls -1s "$@" | cut -d' ' -f1 | awk '{s+=$1} END {print s}' | numfmt --to=iec --suffix=' total'`
    else
        tmp=`ls -1sh "$1"`
    fi
    paste <(wc -l "$@") <(echo "$tmp") | awk '{print $1, $3, $4}' | sort
}

관련 정보