我有多个大型csv文件,其中某些列在我的情况下是0,第一个列是:
1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49
应乘以-1。
我想翻转这些列的数字符号,并将所有+变为-,反之亦然。然后应保存该文件。 Linux中的Shell脚本可以做到吗?也许是awk,pandas或类似的东西?
简短示例:
-2,-4,-5, 8, 5, 7
应该是
2, 4 ,5, -8,-5,-7
编辑:到目前为止,我的努力
import pandas as pd
myfile = open("anyfile.csv")
df = pd.read_csv(myfile, header=None)
#print(df, end="\n\n")
df[1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49] *= -1
#print(df)
如何将结果保存到新的csv中。是否可以通过shellscript自动执行此操作?
答案 0 :(得分:3)
能否请您尝试以下。我正在考虑您要更改所有列的符号,并且要以逗号分隔符格式输出。
awk 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++){$i=$i*-1}} 1' Input_file
OR(根据詹姆斯爵士先生的好建议):
awk 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++){$i=-$i}}} 1' Input_file
答案 1 :(得分:3)
使用awk:
READ ONLY
位置:
columns="1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49"
awk -v f="$columns" '
BEGIN{ FS=OFS=","; n=split(f,cols,",") }
{ for(i=1; i<=n; i++) $(cols[i]+1)=-1*$(cols[i]+1) }1
' file.csv
,然后将其拆分为名为f
的数组cols
查找列号,然后进行数学运算。我假设所有列都是数字,并且在字段中没有嵌入$(cols[i]+1)
。
答案 2 :(得分:0)
始终添加-
并删除--
。处理空格。
echo "-2,-4,-5, 8, 5, 7" | sed -r 's/ //g;s/(^|,)/& -/g;s/--//g;s/^ //'