每行的乘法

每行的乘法

我想計算文件每一行的值,如下所示:

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

由於它是整數算術,您可以直接在 shell 中執行 - 例如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

這是dcsed正在做的工作:

#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

相關內容