다음과 같이 파일의 각 줄 값을 계산하고 싶습니다.
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
새 파일 1(출력)은 두 번째 필드를 가져오기 위한
-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