我有很多 csv 文件。最初的设计应该有五根柱子。
我刚刚发现 csv 文件的中间列有一个字符串,其中包含任意数量的逗号,并且未正确引用。这会导致行具有任意数量的列。
如何获取这些 csv 文件的前两列和最后两列?
由于逗号的数量可以从行到行改变,我需要一种方法来指定前两列和最后两列。
答案1
awk -F, '{print $1, $2, $(NF-1), $NF}' < input
更一般地说(根据问题的标题),打印n
输入的第一列和最后一列——而不检查这是否意味着将某些列打印两次——
awk -v n=2 '{
for(i=1; i <= n && i <= NF; i++)
printf "%s%s", $i, OFS
for(i=NF-n+1; i <= NF && i >= 1; i++)
printf "%s%s", $i, OFS
printf "%s", ORS
}' < input
(-F
根据需要使用分隔符)
答案2
珀尔:
echo a,b,X,X,X,X,c,d | perl -F, -slane 'print join ",", @F[0..$n-1, -$n..-1]' -- -n=2
a,b,c,d
答案3
你也可以使用这个 sed
sed -E 's/(([^,]*,){2}).*((,[^,]*){2})/\1\3/;s/,,/,/'