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