以下のようにCSVファイルがあります。
input.csv
1,2,3
4,5,6,7,8
9,10,11,12
これからやりたい
output.csv
3
8
12
特定の固定サイズ列に使用できることを知っています。
cut -d \, -f 1 >output.csv
このバーは場所が多様で見つけられません。助けてくれてありがとう。よろしくお願いします。
答え1
1つの解決策は次のとおりです。
awk -F "," '{print $NF}' input.csv > output.csv
答え2
awk -F, '{print $NF}'
すでに与えられているように、この場合に最適です。
他の方法:
行を反転して最初の列をインポートしてから、反転できます。
$ rev input.csv | cut -d, -f1 | rev
3
8
12
使用sed
$ sed 's/.*,\(.*\)/\1/' input.csv
3
8
12
使用grep
とpcre
$ grep -oP '.*,\K.*' input.csv
3
8
12
答え3
最後のフィールド自体にカンマが含まれている場合は、実際にCSVファイルを解析できるものを使用することをお勧めします。
13,14,15,"this, here"
最後のフィールドはthis, here
、ではありません。here"
私はPythonを使用します。スクリプトに入れるか、コマンドラインからスクリプトを偽にすることができます。
python <(cat <<EOSCRIPT
import sys
import csv
f = csv.reader(open(sys.argv[1]))
for row in f:
print row[-1]
EOSCRIPT
) input.csv > output.csv
答え4
問題のCSVデータは珍しいCSVファイル(ヘッダーがなくレコードごとのフィールド数が異なる)なので、ヘッダーを含む5つのフィールドを持つより一般的なCSVファイルを使用することを選択しました。
$ mlr --icsv --omd cat file
初めて | 2位 | 3番目の場所 | 4位 | 5番目の場所 |
---|---|---|---|---|
1 | 2 | サム | 4 | 5 |
カンマ付きフィールド | 第二 | 氏 | D | 第二 |
6 | 7 | 8 | 9 | 0x0A |
ㅏ | 第二 | 氏 | D | こんにちは世界 |
1st,2nd,3rd,4th,5th
1,2,3,4,5
"field with, comma",B,C,D,E
6,7,8,9,0x0A
A,B,C,D,"Hello, world"
次のように、名前で最後の列を抽出できます。
$ mlr --csv cut -f '5th' file
5th
5
E
0x0A
Hello, world
...または以下のようにフィールド番号で:
$ mlr --csv -N cut -f 5 file
5th
5
E
0x0A
Hello, world
...または最後のフィールドを選択して目的のフィールドを選択します。
$ mlr --csv -N put -q 'print $[NF]' file
5th
5
E
10
Hello, world
-N
上記の最後の2つのコマンドのオプションに注意してください。これはmlr
、データをヘッダーなしのCSVファイルに読み込むように指示します。これにより、名前ではなく数字でフィールドを参照できます。
明らかに、問題のような不規則なCSVファイルを引き続き使用できます。mlr
入力が「不規則」であることを知らせるだけです。
$ mlr --csv --ragged -N put -q 'print $[NF]' file
3
8
12