모든 줄의 곱셈

모든 줄의 곱셈

다음과 같이 파일의 모든 줄에서 값을 계산하고 싶습니다.

1  1441792,11534336
2  1048576,8388608
3  1441792,1153433
4  1966080,15728640
5  393216,3145728
6  2621440,20971520
7  2490368,19922944

11534336두 번째 값( , , [...]) 을 획득 8388608하고 예를 들어 3을 곱한 다음 이 값을 새 파일에 저장해야 합니다.

답변1

awk당신 도 사용할 수 있습니다

 awk -F "," '{print $2*3}' src.dat  > newfile


src.dat소스 데이터(입력)는 어디에 있습니까
newfile? 새 파일 하나(출력)는
-F ","필드 구분 기호로 사용 ,
$2됩니다. 는 두 번째 필드(다음 필드 ,) 를 가져오는 데 사용됩니다.

답변2

정수 연산이므로 쉘에서 직접 수행할 수도 있습니다. 예를 들어 다음과 같습니다.bash

while IFS="$IFS," read n x y; do printf '%d\n' "$((3*y))"; done < file > newfile

테스트 대상stdout

$ while IFS="$IFS," read n x y; do printf '%d\n' "$((3*y))"; done < file
34603008
25165824
3460299
47185920
9437184
62914560
59768832

답변3

다음은 dc작업 sed을 수행하는 것입니다.

#v#backref courtesy Stephane's comment#v#
sed 's/.*,\(.*\)/[&,]P\1 *3p/' <<-\DATA | dc
    1  1441792,11534336
    2  1048576,8388608
    3  1441792,1153433
    4  1966080,15728640
    5  393216,3145728
    6  2621440,20971520
    7  2490368,19922944
DATA

산출

1  1441792,11534336,34603008
2  1048576,8388608,25165824
3  1441792,1153433,3460299
4  1966080,15728640,47185920
5  393216,3145728,9437184
6  2621440,20971520,62914560
7  2490368,19922944,59768832

그것은매우빠른.

다음과 같은 방법으로 역참조 없이 동일한 작업을 수행할 수 있습니다. 차이가 있다면 다음과 같습니다.

 sed 's/^/[/;s/[^,]*$/&,]P& 3*p/' <file | dc

모두 함께 원하지 않고 결과만 원한다면 여전히 더 쉽습니다.

sed 's/.*,//;s/$/ 3*p/' <file | dc

줄 번호를 매기려면 다음을 수행하세요.

sed 's/.*,//;s/$/ 3*p/' <file | dc | nl

관련 정보