awk 출력 형식을 지정하고 기존 파일에 추가합니다.

awk 출력 형식을 지정하고 기존 파일에 추가합니다.

awk에 명령이 있습니다. awk -F, '{$1=sprintf("%.2f",$1*value)}1' value=$VALUE OFS=, input.txt입력 파일의 첫 번째 열을 곱합니다.

2097160    /home/x/a/c/2GB/
102408     /home/y/b/d/100MB/
...

출력은 다음과 같습니다

0.66
0.03
...

내가 원하는 것은 위의 출력을 탭으로 구분되고 달러 기호로 시작하는 다른 파일의 마지막 열로 추가하여 다음 $과 같이 보이는 것입니다.

2.1G    /home/x/a/c/2GB/                    $0.66
101M    /home/y/b/d/100MB/                  $0.03
...

여러 파일 등을 만들지 않고 어떻게 이 작업을 수행할 수 있습니까?

답변1

입력으로 사용하기 위해 다음 파일을 만들었습니다.

$ cat file1
2097160    /home/x/a/c/2GB/
102408     /home/y/b/d/100MB/
$ cat file1
2097160    /home/x/a/c/2GB/
102408     /home/y/b/d/100MB/

그런 다음 두 파일을 모두 읽을 수 있도록 스크립트를 수정하고 첫 번째 파일을 읽을 때(현재 파일의 레코드 번호 FNR은 입력 레코드 번호 NR과 동일함) 곱셈 결과를 인덱스 배열에 저장합니다. 경로별:

$ awk '(NR==FNR){a[$2]=sprintf("%.2f",$1*value); next} {print $1,$2,a[$2]}' OFS="\t" value=0.000000315 file1 file2
2.1G    /home/x/a/c/2GB/    0.66
101M    /home/y/b/d/100MB/  0.03

답변2

재미로 Perl one-liner는 다음을 사용합니다.수량::바이트::인간기준 치수:

perl -MNumber::Bytes::Human=format_bytes -slane '
    printf "%s\t%s\t\$%.2f\n",
        format_bytes($F[0] * 1024),
        $F[1],
        $value * $F[0]
' -- -value=0.000000315 file
2.1G    /home/x/a/c/2GB/    $0.66
101M    /home/y/b/d/100MB/  $0.03

관련 정보