如何使用 Unix Shell 只显示前 n 列和后 n 列?

Poo*_*IAm 6 sed awk cut csv

我有很多 csv 文件。最初的设计应该有五列。

我刚刚发现 csv 文件的中间列有一个字符串,其中包含任意数量的逗号,并且没有正确引用。这导致行具有任意数量的列。

如何获得这些 csv 文件的前两列和后两列?

由于逗号的数量可以逐行更改,因此我需要一种方法来指定前两列和后两列。

Jef*_*ler 16

awk -F, '{print $1, $2, $(NF-1), $NF}'  < input
Run Code Online (Sandbox Code Playgroud)

更一般地(根据问题的标题),打印输入的第一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
Run Code Online (Sandbox Code Playgroud)

-F根据需要使用分隔符)