Awk

如何使用 Unix Shell 僅顯示前 n 列和後 n 列?

  • January 27, 2018

我有很多 csv 文件。最初的設計應該有五列。

我剛剛發現 csv 文件的中間列有一個字元串,其中包含任意數量的逗號,並且沒有正確引用。這導致行具有任意數量的列。

如何獲取這些 csv 文件的前兩列和最後兩列?

由於逗號的數量可以逐行更改,我需要一種方法來指定前兩列和最後兩列。

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根據需要使用分隔符)

perl:

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

引用自:https://unix.stackexchange.com/questions/419162