埋め込み区切り文字を除外するには、cutを使用します。

埋め込み区切り文字を除外するには、cutを使用します。

CSVファイルがあるとしましょう。

"col1","col2","col3"
"col4","col5,subtext","col6

私が経験した問題は次のとおりです。

cut -d, -f1,2 test.txt
"coll1","col2"
"col4","col5

希望の出力は次のとおりです。

"col1","col2"
"col4","col5,subtext"

答え1

Perlに付属のParseWordsモジュールは、それを非常にエレガントに扱います。以下の例

$ perl -MText::ParseWords -nE '@a=quotewords ",",1,$_;say $a[0],",",$a[1]' <test.txt
"col1","col2"
"col4","col5,subtext"
$

答え2

v4が利用可能な場合はgawk良い解決策があります。awkを使用してcsvを解析し、フィールド内のコンマを無視します。

例:

gawk -vFPAT='[^,]*|"[^"]*"' '{print $1 "," $2}' test.txt

答え3

perlすべてのフィールドが参照されると仮定する別のソリューション

$ perl -F'/"\K,(?=")/' -lane 'print "$F[0],$F[1]"' test.txt 
"col1","col2"
"col4","col5,subtext"
  • -F'/"\K,(?=")/'フィールド区切り記号は、前後に"コンマがある場合にのみコンマです。"
  • print "$F[0],$F[1]"最初の2つのフィールド、区切り記号を印刷,


grepまた利用できます

$ grep -oE '^"[^"]*","[^"]*"' test.txt 
"col1","col2"
"col4","col5,subtext"

N個のフィールドが必要な場合は、内部grep -oE '^("[^"]*",){1}"[^"]*"'番号を使用してください。{}N-1

答え4

以下のようにawkで試してみることもできます。

awk -F'","'  '{printf "%s\",\"%s\"\n", $1, $2 }' test.txt 

例えば。

user@host$ awk -F'","'  '{printf "%s\",\"%s\"\n", $1, $2 }' test.txt 
"col1","col2"
"col4","col5,subtext"

関連情報