awk 零填充到 csv 文件的字符串字段
awk to zero pad to string field of a csv file
我需要用零填充 csv 文件的第 6 列,但是当我尝试使用以下命令时,它只是将实际值替换为 0000。
awk -F',' -v OFS=',' '{ = sprintf("%04d", ); print}' $Input
输入:
"xx","x","xxxxxx","xxx","xx","123","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","23","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","3","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"
输出:
"xx","x","xxxxxx","xxx","xx","0123","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0023","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0003","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"
您可以将此 awk
与自定义字段分隔符一起使用 ","
:
awk 'BEGIN {FS=OFS="\",\""} { = sprintf("%04d", )} 1' file
"xx","x","xxxxxx","xxx","xx","0123","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0023","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0003","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"
执行此操作的一些非 awk 方法:
bash v5.1 包含一个可以启用的 CSV 命令:
BASH_LOADABLES_PATH=${BASH/bin/lib}
enable -f csv csv
while IFS= read -r line; do
csv -a row "$line"
printf -v "row[5]" '%04d' "${row[5]}"
printf '"%s"\n' "${row[@]}" | paste -sd,
done < file
Ruby
ruby -rcsv -e '
CSV.foreach(ARGV.shift) {|row|
row[5] = row[5].rjust(4, "0")
puts CSV.generate_line(row, force_quotes: true)
}
' file
Perl 与 Text::CSV
perl -MText::CSV=csv -e '
$input = csv(in => shift @ARGV);
@padded = map {$_->[5] = sprintf "%04d", $_->[5]; $_} @$input;
csv(in => \@padded, always_quote => 1)
' file
我需要用零填充 csv 文件的第 6 列,但是当我尝试使用以下命令时,它只是将实际值替换为 0000。
awk -F',' -v OFS=',' '{ = sprintf("%04d", ); print}' $Input
输入:
"xx","x","xxxxxx","xxx","xx","123","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","23","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","3","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"
输出:
"xx","x","xxxxxx","xxx","xx","0123","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0023","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0003","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"
您可以将此 awk
与自定义字段分隔符一起使用 ","
:
awk 'BEGIN {FS=OFS="\",\""} { = sprintf("%04d", )} 1' file
"xx","x","xxxxxx","xxx","xx","0123","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0023","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","0003","xxxxxxxxx","xxxxx"
"xx","x","xxxxxx","xxx","xx","4123","xxxxxxxxx","xxxxx"
执行此操作的一些非 awk 方法:
bash v5.1 包含一个可以启用的 CSV 命令:
BASH_LOADABLES_PATH=${BASH/bin/lib}
enable -f csv csv
while IFS= read -r line; do
csv -a row "$line"
printf -v "row[5]" '%04d' "${row[5]}"
printf '"%s"\n' "${row[@]}" | paste -sd,
done < file
Ruby
ruby -rcsv -e '
CSV.foreach(ARGV.shift) {|row|
row[5] = row[5].rjust(4, "0")
puts CSV.generate_line(row, force_quotes: true)
}
' file
Perl 与 Text::CSV
perl -MText::CSV=csv -e '
$input = csv(in => shift @ARGV);
@padded = map {$_->[5] = sprintf "%04d", $_->[5]; $_} @$input;
csv(in => \@padded, always_quote => 1)
' file