
""
内部には、次のように区切られた多くのデータがあります。以下の2行の例,
"stampthisandthat.com","GANDI SAS","[email protected]","whois.gandi.net","A.DNS.GANDI.NET|B.DNS.GANDI.NET|C.DNS.GANDI.NET|","16-feb-2012","28-feb-2013","16-feb-2014","2012-02-16 00:00:00 UTC","2013-02-28 00:00:00 UTC","2014-02-16 00:00:00 UTC","clientTransferProhibited","2013-11-12 08:00:00 UTC","[email protected]","Laura VOGT","","Gandi, 63-65 boulevard Massena","","","","(Gandi) Paris","","(Gandi) 75013","(Gandi) FR","33143730576","","33170377666","","[email protected]","Laura VOGT","","Gandi, 63-65 boulevard Massena","","","","(Gandi) Paris","","(Gandi) 75013","(Gandi) FR","33143730576","","33170377666",""|
"salochinbd.com","FASTDOMAIN, INC.","[email protected]","whois.fastdomain.com","NS1.IPAGE.COM|NS2.IPAGE.COM|","17-feb-2012","03-feb-2013","17-feb-2014","2012-02-17 00:00:00 UTC","2013-02-03 00:00:00 UTC","2014-02-17 00:00:00 UTC","ok","2013-11-12 08:00:00 UTC","[email protected]","","","","","","","Cedar Rapids","Iowa","52402","UNITED STATES","","","13192100679","","[email protected]","","","","","","","Cedar Rapids","Iowa","52402","UNITED STATES","","","13192100679",""|
特定のデータのみをアーカイブするにはどうすればよいですか?たとえば、最初、2番目、5番目のデータのみを保持する方法です""
。
答え1
cut -d\" -f2,4,10 <in | tr \" , >out
...フィールド1,2,5の参照ビットのみを取得し、コンマで区切られたことを確認します。
それとも引用符の中にカンマがあるかもしれません...
cut -d\" -f-5,10-11 <in | sed s/,$// >out
...でも...
cut -d\" -f-5,10 <in | paste -d\" - /dev/null >out
...正しく設定した可能性があります。
最初のものは次のように印刷されます。
stampthisandthat.com,GANDI SAS,A.DNS.GANDI.NET|B.DNS.GANDI.NET|C.DNS.GANDI.NET|
salochinbd.com,FASTDOMAIN, INC.,NS1.IPAGE.COM|NS2.IPAGE.COM|
...そして2番目と3番目も...
"stampthisandthat.com","GANDI SAS","A.DNS.GANDI.NET|B.DNS.GANDI.NET|C.DNS.GANDI.NET|"
"salochinbd.com","FASTDOMAIN, INC.","NS1.IPAGE.COM|NS2.IPAGE.COM|"
次の例は、フィールド 1,3,17,21,22,23,24 で同様の操作を実行する方法を示しています。
printf '"%s"\n' "$(seq -s\",\" 35)" |
cut -d\" -f-3,6-7,34-35,42-48 |
paste -d\" - /dev/null
"1","3","17","21","22","23","24"
...次のように、出力から適切なフィールドのみを取得しますseq
。
"1","2","3",..."35"
答え2
というよく知られていないプログラムがあります。CSV見積もりこれによりcut
、、、、sed
などの標準ツールを使用してawk
CSVファイルを処理できます。引用符内の特殊文字を印刷できない文字にマップしてから再マップするように機能します。このプログラムを使用すると、次のように簡単です。
csvquote file.csv | cut -d , -f 1,2,5 | csvquote -u
出力:
"stampthisandthat.com","GANDI SAS","A.DNS.GANDI.NET|B.DNS.GANDI.NET|C.DNS.GANDI.NET|"
"salochinbd.com","FASTDOMAIN, INC.","NS1.IPAGE.COM|NS2.IPAGE.COM|"
答え3
awk -F',' '{print $1 $2 $5}'
- これはあなたが探しているものですか?
答え4
カンマを含むフィールドの問題を解決するには、フィールド区切り文字を次のように変更します。引用+コンマ;フィールドに含まれるカンマがフィールドの先頭および/または末尾にないと仮定します。
$ awk -F'(\",)' '{print $1 $2 $17}' test.txt
ただ確認してください脱出するシェルを保護するには、一重引用符の中に引用符と周囲のフィールド区切り文字を入れます。
ノートgawk
私はこれがFedora 20で使用されていると思います。