Linux 从列中减去常数

Linux 从列中减去常数,linux,csv,awk,Linux,Csv,Awk,我有两个大文件(~10GB),如下所示: file1.csv name,id,dob,year,age,score Mike,1,2014-01-01,2016,2,20 Ellen,2, 2012-01-01,2016,4,35 . . id,course_name,course_id 1,math,101 1,physics,102 1,chemistry,103 2,math,101 2,physics,102 2,chemistry,103 . . name,id,dob,year,

我有两个大文件(~10GB),如下所示:

file1.csv

name,id,dob,year,age,score
Mike,1,2014-01-01,2016,2,20
Ellen,2, 2012-01-01,2016,4,35
.
.
id,course_name,course_id
1,math,101
1,physics,102
1,chemistry,103
2,math,101
2,physics,102
2,chemistry,103
.
.
name,id,dob,year,age,score
Mike,0,2014-01-01,2016,2,20
Ellen,0, 2012-01-01,2016,4,35
id,course_name,course_id
0,math,101
0,physics,102
0,chemistry,103
1,math,101
1,physics,102
1,chemistry,103
file2.csv

name,id,dob,year,age,score
Mike,1,2014-01-01,2016,2,20
Ellen,2, 2012-01-01,2016,4,35
.
.
id,course_name,course_id
1,math,101
1,physics,102
1,chemistry,103
2,math,101
2,physics,102
2,chemistry,103
.
.
name,id,dob,year,age,score
Mike,0,2014-01-01,2016,2,20
Ellen,0, 2012-01-01,2016,4,35
id,course_name,course_id
0,math,101
0,physics,102
0,chemistry,103
1,math,101
1,physics,102
1,chemistry,103
我想从这些文件的“id”列中减去1:

file1\u updated.csv

name,id,dob,year,age,score
Mike,1,2014-01-01,2016,2,20
Ellen,2, 2012-01-01,2016,4,35
.
.
id,course_name,course_id
1,math,101
1,physics,102
1,chemistry,103
2,math,101
2,physics,102
2,chemistry,103
.
.
name,id,dob,year,age,score
Mike,0,2014-01-01,2016,2,20
Ellen,0, 2012-01-01,2016,4,35
id,course_name,course_id
0,math,101
0,physics,102
0,chemistry,103
1,math,101
1,physics,102
1,chemistry,103
file2\u updated.csv

name,id,dob,year,age,score
Mike,1,2014-01-01,2016,2,20
Ellen,2, 2012-01-01,2016,4,35
.
.
id,course_name,course_id
1,math,101
1,physics,102
1,chemistry,103
2,math,101
2,physics,102
2,chemistry,103
.
.
name,id,dob,year,age,score
Mike,0,2014-01-01,2016,2,20
Ellen,0, 2012-01-01,2016,4,35
id,course_name,course_id
0,math,101
0,physics,102
0,chemistry,103
1,math,101
1,physics,102
1,chemistry,103
我尝试了
awk'{print($1-1)”,“$0}”file2.csv
,但没有得到正确的结果:

-1,id,course_name,course_id
0,1,math,101
0,1,physics,102
0,1,chemistry,103
1,2,math,101
1,2,physics,102
1,2,chemistry,103

您在尝试中添加了一个额外的列。而是将第一个字段
$1
设置为
$1-1

 awk -F"," 'BEGIN{OFS=","} {$1=$1-1;print $0}' file2.csv
该分号分隔命令。我们将分隔符设置为逗号(
-F“,”
),将输出字段分隔符设置为逗号
BEGIN{OFS=“,”}
。从第一个字段减去1的第一个命令首先执行,然后打印命令第二个执行,因此整个记录,
$0
,在打印时现在将包含新的
$1

只从不是标题的记录中减去1可能会有所帮助。因此,您可以向第一个命令添加条件:

awk -F"," 'BEGIN{OFS=","} NR>1{$1=$1-1} {print $0}' file2.csv

现在我们只在记录编号(
NR
)大于1时进行减法。然后我们只打印整个记录。

谢谢,但是'awk'{$1=$1-1;print$0}'file2.csv'只输出减去1的第一列。我需要输出中的所有列。我的不好。我已经更新了脚本,将输入字段分隔符更改为逗号,并将输出字段分隔符更改为anks@jnevil。你救了我一天;)