CSVファイルをソートする必要がありますが、ヘッダー行(最初の行)は引き続きソートされます。これが私が使用するものです:
cat data1.csv | sort -t"|" -k 1 -o data1.csv
以下は例示的な行です。
Name|Email|Country|Company|Phone
Brent Trujillo|[email protected]|Burkina Faso|Donec LLC|(612) 943-0167
答え1
これは機能し、次に出力されますdata2.csv
。
head -n 1 data1.csv > data2.csv &&
tail -n +2 data1.csv | sort -t "|" -k 1 >> data2.csv
答え2
私の考えでは、問題の大部分が
... -k 1 ...
sort
彼らの-k
主張は少なくともㅏ-k [num]
スタート そして ,[num]
終わりそれぞれに固有の参照があります。実際、-k 1
これはソートキーをまったく指定しないものと変わりません。なぜなら、閉じる参照がないと、行は行sort
の最初から最後までソートされるからです。
sort
最初の区切りフィールドのみを|
ラップするには、次の操作を行う必要があります。
... -k1,1 ...
これをして最初の行にスタートその後、|
GNUを使用すると、sort
次のことができます。
sort -st\| -k1,1 <infile >outfile
...最初の行はそのまま残ります。希望の動作を得ることができます。
POSIXは1行のすべてのバイト計算をsort
指定するので、上記でGNUを指定しました。sort
比較にとって重要-u
一意でない操作sort
ですべてのソートキーを使用した後(2回 - 最初のパスの後に少なくとも削除修飾子が割り当てられた隣接する同じキー行)そして隣接する同じ結合ラインを維持しなさい。これは次のことを意味します。
printf '|%s\n' 9 1 | sort -nk1,1
...POSIXをsort
印刷中...
|1
|9
-k
...最初のフィールド(すべての引数に一致する唯一のフィールド)が完全に空であるため、直観に反することができます。デフォルトでは、GNUsort
も同じ内容を印刷しますが、-s
テーブルソートオプションを指定すると印刷されます。
|9
|1
...テーブルの並べ替えのために重複するエントリを削除するのでは-u
なく、一意の並べ替えと同じ方法でコマンドラインで指定されたフィールドで許可されている行以上を評価しないためです。-s
ファイルをまったく変更せず、ヘッダー行が最初の行でソートにGNUを使用している場合は、sort
次のことができます。
{ printf \|; cat file; } |
sort -st\| -k1,1 |
sed 's/.//;q'
...私の考えでは、標準出力から必要な結果を得ることができるようです。
それともそうです...
{ printf \|; cat file; } |
nl -ba -s\| |
sort -t\| -k2,2 -k1n,1 |
cut -d\| -f2-
...どの実装でも同じです。