将字符串/号码插入CSV文件的特定单元格中



基本上,我有一个用于运行一系列测试的循环运行。测试通过后,我将结果输入到CSV文件中:

for (( some statement ))
     do
         if[[ something ]]
              input this value into a specific row and column
         fi
     done

我现在不知道的是如何将特定值输入到CSV文件中的特定单元格中。我知道在awk中,您可以使用此命令读取一个单元格: awk -v "row=2" -F'@' 'NR == row { print $2 }' some.csv将在第二行和第二列中打印单元格。我需要类似的东西,除非它可以将值输入到特定的单元格中,而不是读取它。是否有一个功能?

您可以使用以下内容:

awk -v value=$value -v row=$row -v col=$col 'BEGIN{FS=OFS="@"} NR==row {$col=value}1' file

并设置BASH值$value$row$col。然后,您可以重定向并移至原始:

awk ... file> new_file&&MV new_file文件

&&意味着如果成功执行了第一个命令(awk...),则将执行第二个命令。

解释

  • -v value=$value -v row=$row -v col=$col将bash变量传递到 awk。注意 valuerowcol可能是其他名称,我只是使用与bash相同的名称,使其更容易理解。
  • BEGIN{FS=OFS="@"}将字段分离器和输出场分隔符设置为@OFS="@"在这里不需要,但是如果您做一些print
  • NR==row {$col=value}当记录数(此处的行数)等于row时,然后将col列设置为value值。
  • 1执行默认awk操作:{print $0}

示例

$ cat a
hello@how@are@you
i@am@fine@thanks
hoho@haha@hehe
$ row=2
$ col=3
$ value="XXX"
$ awk -v value=$value -v row=$row -v col=$col 'BEGIN{FS=OFS="@"} NR==row {$col=value}1' a
hello@how@are@you
i@am@XXX@thanks
hoho@haha@hehe

您的问题具有'perl'标签,因此这是一种使用tie :: Array :: CSV进行操作的方法标准阵列操作:

use strict;
use warnings;
use Tie::Array::CSV;
my $row = 2;
my $col = 3;
my $value = 'value';
my $filename = '/path/to/file.csv';
tie my @file, 'Tie::Array::CSV', $filename, sep_char => '@';
$file[$row][$col] = $value;
untie @file;

使用sed

row=2                                        # define the row number
col=3                                        # define the column number
value="value"                                # define the value you need change.
sed "$row s/[^@]{1,}/$value/$col" file.csv # use shell variable in sed to find row number first, then replace any word between @, and only replace the nominate column.
# So above sed command is converted to sed "2 s/[^@]{1,}/value/3" file.csv

如果上述命令很好,并且您的sed命令支持选项-i,然后运行命令直接在file.csv

中更改内容。
sed -i "$row s/[^@]{1,}/$value/$col" file.csv

否则,您需要导出到临时文件,然后更改名称。

sed "$row s/[^@]{1,}/$value/$col" file.csv > temp.csv
mv temp.csv file.csv

相关内容

  • 没有找到相关文章

最新更新