例如,假设我希望有一个包含5列的CSV文件。我怎么能转换
a,b,c,d
d,e,f
到
a,b,c,d,
d,e,f,,
答案 0 :(得分:6)
在Awk中很容易:
awk -F, -vOFS=, '{$5=$5}1'
Bash不太难:
IFS=,
while read -a F; do
for ((i=0; i<5; i++)); do
F[i]=${F[i]}
done
echo "${F[*]}"
done
答案 1 :(得分:4)
awk
的示例:
$ awk -F, '{printf("%s,%s,%s,%s,%s\n",$1,$2,$3,$4,$5)}' example.txt
a,b,c,d,
d,e,f,,
或
$ awk -F, -v OFS=, '{print $1,$2,$3,$4,$5}' example.txt
答案 2 :(得分:2)
我找到了一个GNU sed
的解决方案:
sed -r 's/^([^,]*)(,|)([^,]*)(,|)([^,]*)(,|)([^,]*)(,|)$/\1,\3,\5,\7,/'
# | | | | ^ ^ ^ ^
# | | | | | | | |
# |__________|__________|__________|__________| | | |
# |__________|__________|_____________| | |
# |__________|________________| |
# |___________________|
证明:
echo -e "a,b,c,d\nd,e,f\nx" | sed -r 's/^([^,]*)(,|)([^,]*)(,|)([^,]*)(,|)([^,]*)(,|)$/\1,\3,\5,\7,/'
a,b,c,d,
d,e,f,,
x,,,,
答案 3 :(得分:0)
我非常喜欢的另一种方法是:
gawk '{print $0 ",,,,,"}' a | cut -d \, -f 1-5
我认为它更加简单明了